aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/dvb-frontends/stv090x.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/media/dvb-frontends/stv090x.c b/drivers/media/dvb-frontends/stv090x.c
index 56d470ad5a82..23e872f84742 100644
--- a/drivers/media/dvb-frontends/stv090x.c
+++ b/drivers/media/dvb-frontends/stv090x.c
@@ -35,6 +35,9 @@
35#include "stv090x.h" 35#include "stv090x.h"
36#include "stv090x_priv.h" 36#include "stv090x_priv.h"
37 37
38/* Max transfer size done by I2C transfer functions */
39#define MAX_XFER_SIZE 64
40
38static unsigned int verbose; 41static unsigned int verbose;
39module_param(verbose, int, 0644); 42module_param(verbose, int, 0644);
40 43
@@ -722,9 +725,16 @@ static int stv090x_write_regs(struct stv090x_state *state, unsigned int reg, u8
722{ 725{
723 const struct stv090x_config *config = state->config; 726 const struct stv090x_config *config = state->config;
724 int ret; 727 int ret;
725 u8 buf[2 + count]; 728 u8 buf[MAX_XFER_SIZE];
726 struct i2c_msg i2c_msg = { .addr = config->address, .flags = 0, .buf = buf, .len = 2 + count }; 729 struct i2c_msg i2c_msg = { .addr = config->address, .flags = 0, .buf = buf, .len = 2 + count };
727 730
731 if (2 + count > sizeof(buf)) {
732 printk(KERN_WARNING
733 "%s: i2c wr reg=%04x: len=%d is too big!\n",
734 KBUILD_MODNAME, reg, count);
735 return -EINVAL;
736 }
737
728 buf[0] = reg >> 8; 738 buf[0] = reg >> 8;
729 buf[1] = reg & 0xff; 739 buf[1] = reg & 0xff;
730 memcpy(&buf[2], data, count); 740 memcpy(&buf[2], data, count);