diff options
author | Andy Walls <awalls@radix.net> | 2009-11-20 23:47:45 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-12-05 15:41:55 -0500 |
commit | f412d36a8c9f8e40e057b71e80d534ac388e903e (patch) | |
tree | 36f5a0005efce82787a3dc99af8417dee79f0055 /drivers/media/video/ivtv/ivtv-i2c.c | |
parent | e45e8f5cee75b0559ce1ca7007b4963b91910fa8 (diff) |
V4L/DVB (13442): ivtv: Add module parameter to adjust I2C SCL clock period per board
Add a module parameter to adjust I2C SCL clock period per board. This allows
some experimental fine tuning by end users to overcome quirky I2C device
problems.
Reported-by: "Aleksandr V. Piskunov" <aleksandr.v.piskunov@gmail.com>
Signed-off-by: Andy Walls <awalls@radix.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/ivtv/ivtv-i2c.c')
-rw-r--r-- | drivers/media/video/ivtv/ivtv-i2c.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/media/video/ivtv/ivtv-i2c.c b/drivers/media/video/ivtv/ivtv-i2c.c index b9c71e61f7d6..d4cc3365038e 100644 --- a/drivers/media/video/ivtv/ivtv-i2c.c +++ b/drivers/media/video/ivtv/ivtv-i2c.c | |||
@@ -564,13 +564,15 @@ static struct i2c_adapter ivtv_i2c_adap_template = { | |||
564 | .owner = THIS_MODULE, | 564 | .owner = THIS_MODULE, |
565 | }; | 565 | }; |
566 | 566 | ||
567 | #define IVTV_ALGO_BIT_TIMEOUT (2) /* seconds */ | ||
568 | |||
567 | static const struct i2c_algo_bit_data ivtv_i2c_algo_template = { | 569 | static const struct i2c_algo_bit_data ivtv_i2c_algo_template = { |
568 | .setsda = ivtv_setsda_old, | 570 | .setsda = ivtv_setsda_old, |
569 | .setscl = ivtv_setscl_old, | 571 | .setscl = ivtv_setscl_old, |
570 | .getsda = ivtv_getsda_old, | 572 | .getsda = ivtv_getsda_old, |
571 | .getscl = ivtv_getscl_old, | 573 | .getscl = ivtv_getscl_old, |
572 | .udelay = 10, | 574 | .udelay = IVTV_DEFAULT_I2C_CLOCK_PERIOD / 2, /* microseconds */ |
573 | .timeout = 200, | 575 | .timeout = IVTV_ALGO_BIT_TIMEOUT * HZ, /* jiffies */ |
574 | }; | 576 | }; |
575 | 577 | ||
576 | static struct i2c_client ivtv_i2c_client_template = { | 578 | static struct i2c_client ivtv_i2c_client_template = { |
@@ -602,6 +604,7 @@ int init_ivtv_i2c(struct ivtv *itv) | |||
602 | memcpy(&itv->i2c_algo, &ivtv_i2c_algo_template, | 604 | memcpy(&itv->i2c_algo, &ivtv_i2c_algo_template, |
603 | sizeof(struct i2c_algo_bit_data)); | 605 | sizeof(struct i2c_algo_bit_data)); |
604 | } | 606 | } |
607 | itv->i2c_algo.udelay = itv->options.i2c_clock_period / 2; | ||
605 | itv->i2c_algo.data = itv; | 608 | itv->i2c_algo.data = itv; |
606 | itv->i2c_adap.algo_data = &itv->i2c_algo; | 609 | itv->i2c_adap.algo_data = &itv->i2c_algo; |
607 | 610 | ||