Skip to content

Commit

Permalink
[media] cx231xx-i2c: reduce stack size in bus scan
Browse files Browse the repository at this point in the history
The cx231xx_do_i2c_scan function needs a lot of stack because
it puts an i2c_client structure on it:

drivers/media/usb/cx231xx/cx231xx-i2c.c: In function 'cx231xx_do_i2c_scan':
drivers/media/usb/cx231xx/cx231xx-i2c.c:518:1: error: the frame size of 1248 bytes is larger than 1152 bytes [-Werror=frame-larger-than=]

This changes it to call i2c_transfer() directly instead, avoiding the
need for the structure.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
  • Loading branch information
Arnd Bergmann authored and Mauro Carvalho Chehab committed Mar 3, 2017
1 parent 6830733 commit 4063987
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions drivers/media/usb/cx231xx/cx231xx-i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -491,20 +491,24 @@ void cx231xx_do_i2c_scan(struct cx231xx *dev, int i2c_port)
{
unsigned char buf;
int i, rc;
struct i2c_client client;
struct i2c_adapter *adap;
struct i2c_msg msg = {
.flags = I2C_M_RD,
.len = 1,
.buf = &buf,
};

if (!i2c_scan)
return;

/* Don't generate I2C errors during scan */
dev->i2c_scan_running = true;

memset(&client, 0, sizeof(client));
client.adapter = cx231xx_get_i2c_adap(dev, i2c_port);
adap = cx231xx_get_i2c_adap(dev, i2c_port);

for (i = 0; i < 128; i++) {
client.addr = i;
rc = i2c_master_recv(&client, &buf, 0);
msg.addr = i;
rc = i2c_transfer(adap, &msg, 1);

if (rc < 0)
continue;
dev_info(dev->dev,
Expand Down

0 comments on commit 4063987

Please sign in to comment.