Commit 21dc61d3 authored by Devin Heitmueller's avatar Devin Heitmueller Committed by Mauro Carvalho Chehab

[media] au0828: tweak workaround for i2c clock stretching bug

The hack I put in a couple of years ago to avoid clock stretching issues
when talking to the xc5000 worked fine for writes, but intermittently
fails for register reads, because the xc5000 may stretch the clock for
longer between bytes (I was seeing cases of 21 us on the analyzer).

The problem manifested itself as the xc5000 firmware version and PLL
lock register intermittently showing garbage values.

Slow down the i2c bus from 30 KHz to 20 KHz to accommodate.
Signed-off-by: default avatarDevin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 22d5c6f5
...@@ -46,7 +46,7 @@ struct au0828_board au0828_boards[] = { ...@@ -46,7 +46,7 @@ struct au0828_board au0828_boards[] = {
.name = "Hauppauge HVR850", .name = "Hauppauge HVR850",
.tuner_type = TUNER_XC5000, .tuner_type = TUNER_XC5000,
.tuner_addr = 0x61, .tuner_addr = 0x61,
.i2c_clk_divider = AU0828_I2C_CLK_30KHZ, .i2c_clk_divider = AU0828_I2C_CLK_20KHZ,
.input = { .input = {
{ {
.type = AU0828_VMUX_TELEVISION, .type = AU0828_VMUX_TELEVISION,
...@@ -77,7 +77,7 @@ struct au0828_board au0828_boards[] = { ...@@ -77,7 +77,7 @@ struct au0828_board au0828_boards[] = {
stretch fits inside of a normal clock cycle, or else the stretch fits inside of a normal clock cycle, or else the
au0828 fails to set the STOP bit. A 30 KHz clock puts the au0828 fails to set the STOP bit. A 30 KHz clock puts the
clock pulse width at 18us */ clock pulse width at 18us */
.i2c_clk_divider = AU0828_I2C_CLK_30KHZ, .i2c_clk_divider = AU0828_I2C_CLK_20KHZ,
.input = { .input = {
{ {
.type = AU0828_VMUX_TELEVISION, .type = AU0828_VMUX_TELEVISION,
......
...@@ -63,3 +63,4 @@ ...@@ -63,3 +63,4 @@
#define AU0828_I2C_CLK_250KHZ 0x07 #define AU0828_I2C_CLK_250KHZ 0x07
#define AU0828_I2C_CLK_100KHZ 0x14 #define AU0828_I2C_CLK_100KHZ 0x14
#define AU0828_I2C_CLK_30KHZ 0x40 #define AU0828_I2C_CLK_30KHZ 0x40
#define AU0828_I2C_CLK_20KHZ 0x60
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment