aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <m.chehab@samsung.com>2013-11-02 03:29:42 -0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2013-11-08 06:45:38 -0500
commit9736a89dafe07359d9c86bf9c3b815a250b354bc (patch)
treecb55432ce8acc50f6aaf18bd622aebfd7f2102f7 /drivers/media
parentce01cbdc54d6869f0ee3230be2b8cfc9fd1366f3 (diff)
[media] s5h1420: Don't use dynamic static allocation
Dynamic static allocation is evil, as Kernel stack is too low, and compilation complains about it on some archs: drivers/media/dvb-frontends/s5h1420.c:851:1: warning: 's5h1420_tuner_i2c_tuner_xfer' uses dynamic stack allocation [enabled by default] Instead, let's enforce a limit for the buffer. In the specific case of this frontend, only ttpci uses it. The maximum number of messages there is two, on I2C read operations. As the logic can add an extra operation, change the size to 3. Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com> Reviewed-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/dvb-frontends/s5h1420.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/media/dvb-frontends/s5h1420.c b/drivers/media/dvb-frontends/s5h1420.c
index e2fec9ebf947..93eeaf7118fd 100644
--- a/drivers/media/dvb-frontends/s5h1420.c
+++ b/drivers/media/dvb-frontends/s5h1420.c
@@ -836,9 +836,16 @@ static u32 s5h1420_tuner_i2c_func(struct i2c_adapter *adapter)
836static int s5h1420_tuner_i2c_tuner_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msg[], int num) 836static int s5h1420_tuner_i2c_tuner_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msg[], int num)
837{ 837{
838 struct s5h1420_state *state = i2c_get_adapdata(i2c_adap); 838 struct s5h1420_state *state = i2c_get_adapdata(i2c_adap);
839 struct i2c_msg m[1 + num]; 839 struct i2c_msg m[3];
840 u8 tx_open[2] = { CON_1, state->CON_1_val | 1 }; /* repeater stops once there was a stop condition */ 840 u8 tx_open[2] = { CON_1, state->CON_1_val | 1 }; /* repeater stops once there was a stop condition */
841 841
842 if (1 + num > ARRAY_SIZE(m)) {
843 printk(KERN_WARNING
844 "%s: i2c xfer: num=%d is too big!\n",
845 KBUILD_MODNAME, num);
846 return -EOPNOTSUPP;
847 }
848
842 memset(m, 0, sizeof(struct i2c_msg) * (1 + num)); 849 memset(m, 0, sizeof(struct i2c_msg) * (1 + num));
843 850
844 m[0].addr = state->config->demod_address; 851 m[0].addr = state->config->demod_address;
@@ -847,7 +854,7 @@ static int s5h1420_tuner_i2c_tuner_xfer(struct i2c_adapter *i2c_adap, struct i2c
847 854
848 memcpy(&m[1], msg, sizeof(struct i2c_msg) * num); 855 memcpy(&m[1], msg, sizeof(struct i2c_msg) * num);
849 856
850 return i2c_transfer(state->i2c, m, 1+num) == 1 + num ? num : -EIO; 857 return i2c_transfer(state->i2c, m, 1 + num) == 1 + num ? num : -EIO;
851} 858}
852 859
853static struct i2c_algorithm s5h1420_tuner_i2c_algo = { 860static struct i2c_algorithm s5h1420_tuner_i2c_algo = {