|
@@ -463,8 +463,13 @@ static void cx23885_initialize(struct i2c_client *client)
|
|
|
{
|
|
|
DEFINE_WAIT(wait);
|
|
|
struct cx25840_state *state = to_state(i2c_get_clientdata(client));
|
|
|
+ u32 clk_freq = 0;
|
|
|
struct workqueue_struct *q;
|
|
|
|
|
|
+ /* cx23885 sets hostdata to clk_freq pointer */
|
|
|
+ if (v4l2_get_subdev_hostdata(&state->sd))
|
|
|
+ clk_freq = *((u32 *)v4l2_get_subdev_hostdata(&state->sd));
|
|
|
+
|
|
|
/*
|
|
|
* Come out of digital power down
|
|
|
* The CX23888, at least, needs this, otherwise registers aside from
|
|
@@ -500,8 +505,13 @@ static void cx23885_initialize(struct i2c_client *client)
|
|
|
* 50.0 MHz * (0xb + 0xe8ba26/0x2000000)/4 = 5 * 28.636363 MHz
|
|
|
* 572.73 MHz before post divide
|
|
|
*/
|
|
|
- /* HVR1850 or 50MHz xtal */
|
|
|
- cx25840_write(client, 0x2, 0x71);
|
|
|
+ if (clk_freq == 25000000) {
|
|
|
+ /* 888/ImpactVCBe or 25Mhz xtal */
|
|
|
+ ; /* nothing to do */
|
|
|
+ } else {
|
|
|
+ /* HVR1850 or 50MHz xtal */
|
|
|
+ cx25840_write(client, 0x2, 0x71);
|
|
|
+ }
|
|
|
cx25840_write4(client, 0x11c, 0x01d1744c);
|
|
|
cx25840_write4(client, 0x118, 0x00000416);
|
|
|
cx25840_write4(client, 0x404, 0x0010253e);
|
|
@@ -544,9 +554,15 @@ static void cx23885_initialize(struct i2c_client *client)
|
|
|
/* HVR1850 */
|
|
|
switch (state->id) {
|
|
|
case CX23888_AV:
|
|
|
- /* 888/HVR1250 specific */
|
|
|
- cx25840_write4(client, 0x10c, 0x13333333);
|
|
|
- cx25840_write4(client, 0x108, 0x00000515);
|
|
|
+ if (clk_freq == 25000000) {
|
|
|
+ /* 888/ImpactVCBe or 25MHz xtal */
|
|
|
+ cx25840_write4(client, 0x10c, 0x01b6db7b);
|
|
|
+ cx25840_write4(client, 0x108, 0x00000512);
|
|
|
+ } else {
|
|
|
+ /* 888/HVR1250 or 50MHz xtal */
|
|
|
+ cx25840_write4(client, 0x10c, 0x13333333);
|
|
|
+ cx25840_write4(client, 0x108, 0x00000515);
|
|
|
+ }
|
|
|
break;
|
|
|
default:
|
|
|
cx25840_write4(client, 0x10c, 0x002be2c9);
|
|
@@ -576,7 +592,7 @@ static void cx23885_initialize(struct i2c_client *client)
|
|
|
* 368.64 MHz before post divide
|
|
|
* 122.88 MHz / 0xa = 12.288 MHz
|
|
|
*/
|
|
|
- /* HVR1850 or 50MHz xtal */
|
|
|
+ /* HVR1850 or 50MHz xtal or 25MHz xtal */
|
|
|
cx25840_write4(client, 0x114, 0x017dbf48);
|
|
|
cx25840_write4(client, 0x110, 0x000a030e);
|
|
|
break;
|