Lines Matching full:client

74 static void cx23888_std_setup(struct i2c_client *client);
76 int cx25840_write(struct i2c_client *client, u16 addr, u8 value) in cx25840_write() argument
83 return i2c_master_send(client, buffer, 3); in cx25840_write()
86 int cx25840_write4(struct i2c_client *client, u16 addr, u32 value) in cx25840_write4() argument
96 return i2c_master_send(client, buffer, 6); in cx25840_write4()
99 u8 cx25840_read(struct i2c_client *client, u16 addr) in cx25840_read() argument
107 msgs[0].addr = client->addr; in cx25840_read()
113 msgs[1].addr = client->addr; in cx25840_read()
118 if (i2c_transfer(client->adapter, msgs, 2) < 2) in cx25840_read()
124 u32 cx25840_read4(struct i2c_client *client, u16 addr) in cx25840_read4() argument
132 msgs[0].addr = client->addr; in cx25840_read4()
138 msgs[1].addr = client->addr; in cx25840_read4()
143 if (i2c_transfer(client->adapter, msgs, 2) < 2) in cx25840_read4()
150 int cx25840_and_or(struct i2c_client *client, u16 addr, unsigned int and_mask, in cx25840_and_or() argument
153 return cx25840_write(client, addr, in cx25840_and_or()
154 (cx25840_read(client, addr) & and_mask) | in cx25840_and_or()
158 int cx25840_and_or4(struct i2c_client *client, u16 addr, u32 and_mask, in cx25840_and_or4() argument
161 return cx25840_write4(client, addr, in cx25840_and_or4()
162 (cx25840_read4(client, addr) & and_mask) | in cx25840_and_or4()
168 static int set_input(struct i2c_client *client,
177 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx23885_s_io_pin_config() local
182 pin_ctrl = cx25840_read4(client, 0x120); in cx23885_s_io_pin_config()
183 gpio_oe = cx25840_read(client, 0x160); in cx23885_s_io_pin_config()
184 gpio_data = cx25840_read(client, 0x164); in cx23885_s_io_pin_config()
308 cx25840_write(client, 0x164, gpio_data); in cx23885_s_io_pin_config()
309 cx25840_write(client, 0x160, gpio_oe); in cx23885_s_io_pin_config()
310 cx25840_write4(client, 0x120, pin_ctrl); in cx23885_s_io_pin_config()
314 static u8 cx25840_function_to_pad(struct i2c_client *client, u8 function) in cx25840_function_to_pad() argument
317 v4l_err(client, "invalid function %u, assuming default\n", in cx25840_function_to_pad()
388 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_s_io_pin_config() local
393 pinctrl[i] = cx25840_read(client, 0x114 + i); in cx25840_s_io_pin_config()
396 pinconf[i] = cx25840_read(client, 0x11c + i); in cx25840_s_io_pin_config()
398 voutctrl4 = cx25840_read(client, 0x407); in cx25840_s_io_pin_config()
406 v4l_err(client, in cx25840_s_io_pin_config()
422 pinconf[3] |= cx25840_function_to_pad(client, in cx25840_s_io_pin_config()
451 pinconf[4] |= cx25840_function_to_pad(client, in cx25840_s_io_pin_config()
499 cx25840_function_to_pad(client, in cx25840_s_io_pin_config()
507 v4l_err(client, "invalid or unsupported pin %u\n", in cx25840_s_io_pin_config()
513 cx25840_write(client, 0x407, voutctrl4); in cx25840_s_io_pin_config()
516 cx25840_write(client, 0x114 + i, pinctrl[i]); in cx25840_s_io_pin_config()
519 cx25840_write(client, 0x11c + i, pinconf[i]); in cx25840_s_io_pin_config()
538 static void init_dll1(struct i2c_client *client) in init_dll1() argument
544 cx25840_write(client, 0x159, 0x23); in init_dll1()
545 cx25840_write(client, 0x15a, 0x87); in init_dll1()
546 cx25840_write(client, 0x15b, 0x06); in init_dll1()
548 cx25840_write(client, 0x159, 0xe1); in init_dll1()
550 cx25840_write(client, 0x15a, 0x86); in init_dll1()
551 cx25840_write(client, 0x159, 0xe0); in init_dll1()
552 cx25840_write(client, 0x159, 0xe1); in init_dll1()
553 cx25840_write(client, 0x15b, 0x10); in init_dll1()
556 static void init_dll2(struct i2c_client *client) in init_dll2() argument
562 cx25840_write(client, 0x15d, 0xe3); in init_dll2()
563 cx25840_write(client, 0x15e, 0x86); in init_dll2()
564 cx25840_write(client, 0x15f, 0x06); in init_dll2()
566 cx25840_write(client, 0x15d, 0xe1); in init_dll2()
567 cx25840_write(client, 0x15d, 0xe0); in init_dll2()
568 cx25840_write(client, 0x15d, 0xe1); in init_dll2()
571 static void cx25836_initialize(struct i2c_client *client) in cx25836_initialize() argument
579 cx25840_and_or(client, 0x000, ~0x01, 0x01); in cx25836_initialize()
580 cx25840_and_or(client, 0x000, ~0x01, 0x00); in cx25836_initialize()
582 cx25840_and_or(client, 0x15a, ~0x70, 0x00); in cx25836_initialize()
584 cx25840_and_or(client, 0x15b, ~0x1e, 0x06); in cx25836_initialize()
586 cx25840_and_or(client, 0x159, ~0x02, 0x02); in cx25836_initialize()
590 cx25840_and_or(client, 0x159, ~0x02, 0x00); in cx25836_initialize()
592 cx25840_and_or(client, 0x159, ~0xc0, 0xc0); in cx25836_initialize()
594 cx25840_and_or(client, 0x159, ~0x01, 0x00); in cx25836_initialize()
595 cx25840_and_or(client, 0x159, ~0x01, 0x01); in cx25836_initialize()
597 cx25840_and_or(client, 0x15b, ~0x1e, 0x10); in cx25836_initialize()
620 static void cx25840_vconfig_apply(struct i2c_client *client) in cx25840_vconfig_apply() argument
622 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); in cx25840_vconfig_apply()
627 voutctrl[i] = cx25840_read(client, 0x404 + i); in cx25840_vconfig_apply()
690 cx25840_write(client, 0x404 + i, voutctrl[i]); in cx25840_vconfig_apply()
693 static void cx25840_initialize(struct i2c_client *client) in cx25840_initialize() argument
696 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); in cx25840_initialize()
701 cx25840_and_or(client, 0x803, ~0x10, 0x00); in cx25840_initialize()
706 cx25840_write(client, 0x000, 0x04); in cx25840_initialize()
708 init_dll1(client); in cx25840_initialize()
709 init_dll2(client); in cx25840_initialize()
710 cx25840_write(client, 0x136, 0x0a); in cx25840_initialize()
712 cx25840_write(client, 0x13c, 0x01); in cx25840_initialize()
713 cx25840_write(client, 0x13c, 0x00); in cx25840_initialize()
733 cx25840_write(client, 0x115, 0x8c); in cx25840_initialize()
734 cx25840_write(client, 0x116, 0x07); in cx25840_initialize()
735 cx25840_write(client, 0x118, 0x02); in cx25840_initialize()
737 cx25840_write(client, 0x4a5, 0x80); in cx25840_initialize()
738 cx25840_write(client, 0x4a5, 0x00); in cx25840_initialize()
739 cx25840_write(client, 0x402, 0x00); in cx25840_initialize()
741 cx25840_and_or(client, 0x401, ~0x18, 0); in cx25840_initialize()
742 cx25840_and_or(client, 0x4a2, ~0x10, 0x10); in cx25840_initialize()
745 cx25840_write(client, 0x8d3, 0x1f); in cx25840_initialize()
746 cx25840_write(client, 0x8e3, 0x03); in cx25840_initialize()
748 cx25840_std_setup(client); in cx25840_initialize()
751 cx25840_write(client, 0x914, 0xa0); in cx25840_initialize()
752 cx25840_write(client, 0x918, 0xa0); in cx25840_initialize()
753 cx25840_write(client, 0x919, 0x01); in cx25840_initialize()
756 cx25840_write(client, 0x809, 0x04); in cx25840_initialize()
758 cx25840_write(client, 0x8cf, 0x0f); in cx25840_initialize()
761 set_input(client, state->vid_input, state->aud_input); in cx25840_initialize()
764 cx25840_vconfig_apply(client); in cx25840_initialize()
767 cx25840_and_or(client, 0x803, ~0x10, 0x10); in cx25840_initialize()
770 static void cx23885_initialize(struct i2c_client *client) in cx23885_initialize() argument
773 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); in cx23885_initialize()
786 cx25840_write(client, 0x000, 0); in cx23885_initialize()
789 cx25840_and_or(client, 0x102, ~0x01, 0x01); in cx23885_initialize()
790 cx25840_and_or(client, 0x102, ~0x01, 0x00); in cx23885_initialize()
793 cx25840_and_or(client, 0x803, ~0x10, 0x00); in cx23885_initialize()
796 cx25840_write(client, 0x398, 0); in cx23885_initialize()
804 cx25840_write(client, 0x2, 0x76); in cx23885_initialize()
807 cx25840_write(client, 0x1, 0x40); in cx23885_initialize()
821 cx25840_write(client, 0x2, 0x71); in cx23885_initialize()
823 cx25840_write4(client, 0x11c, 0x01d1744c); in cx23885_initialize()
824 cx25840_write4(client, 0x118, 0x00000416); in cx23885_initialize()
825 cx25840_write4(client, 0x404, 0x0010253e); in cx23885_initialize()
826 cx25840_write4(client, 0x42c, 0x42600000); in cx23885_initialize()
827 cx25840_write4(client, 0x44c, 0x161f1000); in cx23885_initialize()
834 cx25840_write4(client, 0x11c, 0x01d1744c); in cx23885_initialize()
835 cx25840_write4(client, 0x118, 0x00000416); in cx23885_initialize()
843 cx25840_write4(client, 0x11c, 0x00000000); in cx23885_initialize()
844 cx25840_write4(client, 0x118, 0x00000414); in cx23885_initialize()
849 cx25840_write4(client, 0x33c, 0x00000001); in cx23885_initialize()
852 cx25840_write4(client, 0x340, 0x0df7df83); in cx23885_initialize()
867 cx25840_write4(client, 0x10c, 0x01b6db7b); in cx23885_initialize()
868 cx25840_write4(client, 0x108, 0x00000512); in cx23885_initialize()
871 cx25840_write4(client, 0x10c, 0x13333333); in cx23885_initialize()
872 cx25840_write4(client, 0x108, 0x00000515); in cx23885_initialize()
876 cx25840_write4(client, 0x10c, 0x002be2c9); in cx23885_initialize()
877 cx25840_write4(client, 0x108, 0x0000040f); in cx23885_initialize()
881 cx25840_write4(client, 0x414, 0x00107d12); in cx23885_initialize()
885 cx25840_write4(client, 0x418, 0x1d008282); in cx23885_initialize()
887 cx25840_write4(client, 0x420, 0x3d008282); in cx23885_initialize()
904 cx25840_write4(client, 0x114, 0x017dbf48); in cx23885_initialize()
905 cx25840_write4(client, 0x110, 0x000a030e); in cx23885_initialize()
913 cx25840_write4(client, 0x114, 0x017dbf48); in cx23885_initialize()
914 cx25840_write4(client, 0x110, 0x000a030e); in cx23885_initialize()
923 cx25840_write4(client, 0x114, 0x01bf0c9e); in cx23885_initialize()
924 cx25840_write4(client, 0x110, 0x000a030c); in cx23885_initialize()
929 cx25840_write(client, 0x102, 0x10); in cx23885_initialize()
932 cx25840_write(client, 0x103, 0x11); in cx23885_initialize()
935 cx25840_write(client, 0x400, 0); in cx23885_initialize()
938 cx25840_write(client, 0x401, 0xe8); in cx23885_initialize()
941 cx25840_write(client, 0x144, 0x05); in cx23885_initialize()
949 cx25840_write(client, 0x160, 0x1d); in cx23885_initialize()
950 cx25840_write(client, 0x164, 0x00); in cx23885_initialize()
974 cx23888_std_setup(client); in cx23885_initialize()
976 cx25840_std_setup(client); in cx23885_initialize()
979 set_input(client, state->vid_input, state->aud_input); in cx23885_initialize()
982 cx25840_and_or(client, 0x803, ~0x10, 0x10); in cx23885_initialize()
985 cx25840_write4(client, CX25840_VID_INT_STAT_REG, 0xffffffff); in cx23885_initialize()
988 cx25840_write(client, CX25840_AUD_INT_CTRL_REG, 0xff); in cx23885_initialize()
989 cx25840_write(client, CX25840_AUD_INT_STAT_REG, 0xff); in cx23885_initialize()
998 cx25840_write4(client, 0x404, 0x0010253e); in cx23885_initialize()
1001 cx25840_write(client, state->vbi_regs_offset + 0x42f, 0x66); in cx23885_initialize()
1005 cx25840_write4(client, 0x130, 0x0); in cx23885_initialize()
1009 cx25840_write4(client, 0x454, 0x6628021F); in cx23885_initialize()
1011 cx25840_write4(client, 0x478, 0x6628021F); in cx23885_initialize()
1014 cx25840_write4(client, 0x144, 0x5); in cx23885_initialize()
1019 cx25840_write4(client, 0x918, 0x1a0); in cx23885_initialize()
1022 cx25840_write4(client, 0x134, 0x000a1800); in cx23885_initialize()
1025 cx25840_write4(client, 0x13c, 0x00310000); in cx23885_initialize()
1030 static void cx231xx_initialize(struct i2c_client *client) in cx231xx_initialize() argument
1033 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); in cx231xx_initialize()
1037 cx25840_and_or(client, 0x102, ~0x01, 0x01); in cx231xx_initialize()
1038 cx25840_and_or(client, 0x102, ~0x01, 0x00); in cx231xx_initialize()
1041 cx25840_and_or(client, 0x803, ~0x10, 0x00); in cx231xx_initialize()
1044 cx25840_write(client, 0x398, 0); in cx231xx_initialize()
1048 cx25840_write(client, 0x2, 0x76); in cx231xx_initialize()
1051 cx25840_write(client, 0x1, 0x40); in cx231xx_initialize()
1054 cx25840_write4(client, 0x33c, 0x00000001); in cx231xx_initialize()
1057 cx25840_write4(client, 0x340, 0x0df7df83); in cx231xx_initialize()
1060 cx25840_write4(client, 0x414, 0x00107d12); in cx231xx_initialize()
1063 cx25840_write4(client, 0x420, 0x3d008282); in cx231xx_initialize()
1066 cx25840_write(client, 0x102, 0x10); in cx231xx_initialize()
1069 cx25840_write(client, 0x103, 0x11); in cx231xx_initialize()
1072 cx25840_write(client, 0x400, 0); in cx231xx_initialize()
1075 cx25840_write(client, 0x401, 0xe8); in cx231xx_initialize()
1094 cx25840_std_setup(client); in cx231xx_initialize()
1097 set_input(client, state->vid_input, state->aud_input); in cx231xx_initialize()
1100 cx25840_and_or(client, 0x803, ~0x10, 0x10); in cx231xx_initialize()
1103 cx25840_write(client, 0x404, 0x0b); in cx231xx_initialize()
1106 cx25840_write(client, 0x42f, 0x66); in cx231xx_initialize()
1107 cx25840_write4(client, 0x474, 0x1e1e601a); in cx231xx_initialize()
1112 void cx25840_std_setup(struct i2c_client *client) in cx25840_std_setup() argument
1114 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); in cx25840_std_setup()
1123 cx25840_write(client, 0x49f, 0x11); in cx25840_std_setup()
1125 cx25840_write(client, 0x49f, 0x14); in cx25840_std_setup()
1203 pll_int = cx25840_read(client, 0x108); in cx25840_std_setup()
1204 pll_frac = cx25840_read4(client, 0x10c) & 0x1ffffff; in cx25840_std_setup()
1205 pll_post = cx25840_read(client, 0x109); in cx25840_std_setup()
1206 v4l_dbg(1, cx25840_debug, client, in cx25840_std_setup()
1215 v4l_dbg(1, cx25840_debug, client, in cx25840_std_setup()
1218 v4l_dbg(1, cx25840_debug, client, in cx25840_std_setup()
1223 v4l_dbg(1, cx25840_debug, client, in cx25840_std_setup()
1228 v4l_dbg(1, cx25840_debug, client, in cx25840_std_setup()
1232 v4l_dbg(1, cx25840_debug, client, in cx25840_std_setup()
1241 cx25840_write(client, 0x470, hblank); in cx25840_std_setup()
1242 cx25840_write(client, 0x471, in cx25840_std_setup()
1244 cx25840_write(client, 0x472, hactive >> 4); in cx25840_std_setup()
1247 cx25840_write(client, 0x473, burst); in cx25840_std_setup()
1250 cx25840_write(client, 0x474, vblank); in cx25840_std_setup()
1251 cx25840_write(client, 0x475, in cx25840_std_setup()
1253 cx25840_write(client, 0x476, vactive >> 4); in cx25840_std_setup()
1254 cx25840_write(client, 0x477, vblank656); in cx25840_std_setup()
1257 cx25840_write(client, 0x478, src_decimation & 0xff); in cx25840_std_setup()
1258 cx25840_write(client, 0x479, (src_decimation >> 8) & 0xff); in cx25840_std_setup()
1261 cx25840_write(client, 0x47a, luma_lpf << 6 | ((uv_lpf << 4) & 0x30)); in cx25840_std_setup()
1264 cx25840_write(client, 0x47b, comb); in cx25840_std_setup()
1267 cx25840_write(client, 0x47c, sc); in cx25840_std_setup()
1268 cx25840_write(client, 0x47d, (sc >> 8) & 0xff); in cx25840_std_setup()
1269 cx25840_write(client, 0x47e, (sc >> 16) & 0xff); in cx25840_std_setup()
1273 cx25840_write(client, 0x47f, 0x01); in cx25840_std_setup()
1276 cx25840_write(client, 0x47f, 0x00); in cx25840_std_setup()
1283 static void input_change(struct i2c_client *client) in input_change() argument
1285 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); in input_change()
1290 cx25840_write(client, 0x402, 0); in input_change()
1292 cx25840_write(client, 0x402, 0x04); in input_change()
1293 cx25840_write(client, 0x49f, in input_change()
1296 cx25840_and_or(client, 0x401, ~0x60, 0); in input_change()
1297 cx25840_and_or(client, 0x401, ~0x60, 0x60); in input_change()
1303 cx25840_and_or(client, 0x810, ~0x01, 1); in input_change()
1306 cx25840_write(client, 0x808, 0xf9); in input_change()
1307 cx25840_write(client, 0x80b, 0x00); in input_change()
1320 cx25840_write(client, 0x808, hw_fix ? 0x2f : 0xf7); in input_change()
1323 cx25840_write(client, 0x808, hw_fix ? 0x3f : 0xf8); in input_change()
1326 cx25840_write(client, 0x808, hw_fix ? 0x1f : 0xf6); in input_change()
1328 cx25840_write(client, 0x80b, 0x00); in input_change()
1331 cx25840_write(client, 0x808, 0xff); in input_change()
1338 cx25840_write(client, 0x80b, 0x00); in input_change()
1341 cx25840_write(client, 0x808, 0xff); in input_change()
1349 cx25840_write(client, 0x80b, 0x00); in input_change()
1353 cx25840_write(client, 0x80b, 0x08); in input_change()
1356 cx25840_write(client, 0x80b, 0x10); in input_change()
1360 cx25840_and_or(client, 0x810, ~0x01, 0); in input_change()
1363 static int set_input(struct i2c_client *client, in set_input() argument
1367 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); in set_input()
1381 v4l_dbg(1, cx25840_debug, client, in set_input()
1386 v4l_dbg(1, cx25840_debug, client, "vid_input 0x%x\n", in set_input()
1392 v4l_dbg(1, cx25840_debug, client, "mux cfg 0x%x comp=%d\n", in set_input()
1402 v4l_err(client, "0x%04x is not a valid video input!\n", in set_input()
1444 v4l_err(client, "0x%04x is not a valid audio input!\n", in set_input()
1450 cx25840_write(client, 0x103, reg); in set_input()
1454 cx25840_and_or(client, 0x401, ~0x6, 0x6); in set_input()
1456 cx25840_and_or(client, 0x401, ~0x6, is_composite ? 0 : 0x02); in set_input()
1461 cx25840_and_or(client, 0x102, ~0x80, 0x80); in set_input()
1464 cx25840_write4(client, 0x31c, 0xc2262600); in set_input()
1465 cx25840_write4(client, 0x320, 0xc2262600); in set_input()
1471 cx25840_write4(client, 0x318, 0xda262600); in set_input()
1472 cx25840_write4(client, 0x33c, 0x2a24c800); in set_input()
1473 cx25840_write4(client, 0x104, 0x0704dd00); in set_input()
1475 cx25840_write4(client, 0x300, 0x015c28f5); in set_input()
1477 cx25840_and_or(client, 0x102, ~0x80, 0); in set_input()
1478 cx25840_write4(client, 0x340, 0xdf7df83); in set_input()
1479 cx25840_write4(client, 0x104, 0x0704dd80); in set_input()
1480 cx25840_write4(client, 0x314, 0x22400600); in set_input()
1481 cx25840_write4(client, 0x318, 0x40002600); in set_input()
1482 cx25840_write4(client, 0x324, 0x40002600); in set_input()
1483 cx25840_write4(client, 0x32c, 0x0250e620); in set_input()
1484 cx25840_write4(client, 0x39c, 0x01FF0B00); in set_input()
1486 cx25840_write4(client, 0x410, 0xffff0dbf); in set_input()
1487 cx25840_write4(client, 0x414, 0x00137d03); in set_input()
1491 cx25840_write4(client, 0x42c, 0x42600000); in set_input()
1493 cx25840_write4(client, 0x430, 0x0000039b); in set_input()
1495 cx25840_write4(client, 0x438, 0x00000000); in set_input()
1497 cx25840_write4(client, 0x440, 0xF8E3E824); in set_input()
1499 cx25840_write4(client, 0x444, 0x401040dc); in set_input()
1501 cx25840_write4(client, 0x448, 0xcd3f02a0); in set_input()
1503 cx25840_write4(client, 0x44c, 0x161f1000); in set_input()
1505 cx25840_write4(client, 0x450, 0x00000802); in set_input()
1507 cx25840_write4(client, 0x91c, 0x01000000); in set_input()
1508 cx25840_write4(client, 0x8e0, 0x03063870); in set_input()
1509 cx25840_write4(client, 0x8d4, 0x7FFF0024); in set_input()
1510 cx25840_write4(client, 0x8d0, 0x00063073); in set_input()
1512 cx25840_write4(client, 0x8c8, 0x00010000); in set_input()
1513 cx25840_write4(client, 0x8cc, 0x00080023); in set_input()
1516 cx25840_write4(client, 0x33c, 0x2a04c800); in set_input()
1520 cx25840_write4(client, 0x398, 0); in set_input()
1525 cx25840_and_or(client, 0x102, ~0x2, (reg & 0x80) == 0 ? 2 : 0); in set_input()
1528 cx25840_and_or(client, 0x102, ~0x4, 4); in set_input()
1530 cx25840_and_or(client, 0x102, ~0x4, 0); in set_input()
1533 cx25840_and_or(client, 0x102, ~0x4, is_component ? 0x4 : 0x0); in set_input()
1536 cx25840_and_or(client, 0x102, ~0x2, 0); in set_input()
1541 cx25840_and_or(client, 0x102, ~0x2, 2); in set_input()
1544 cx25840_and_or(client, 0x102, ~0x2, 0); in set_input()
1552 cx25840_and_or(client, 0x102, ~0x2, 0x2); in set_input()
1554 val = cx25840_read4(client, MODE_CTRL); in set_input()
1560 cx25840_write4(client, MODE_CTRL, val); in set_input()
1562 val = cx25840_read4(client, AFE_CTRL); in set_input()
1571 cx25840_write4(client, AFE_CTRL, val); in set_input()
1573 cx25840_and_or(client, 0x102, ~0x2, 0); in set_input()
1579 cx25840_audio_set_path(client); in set_input()
1580 input_change(client); in set_input()
1584 cx25840_write(client, 0x124, 0x03); in set_input()
1587 cx25840_write(client, 0x144, 0x05); in set_input()
1590 cx25840_write(client, 0x914, 0xa0); in set_input()
1596 cx25840_write(client, 0x918, 0xa0); in set_input()
1597 cx25840_write(client, 0x919, 0x01); in set_input()
1600 cx25840_write(client, 0x124, 0x03); in set_input()
1603 cx25840_write(client, 0x914, 0xa0); in set_input()
1609 cx25840_write(client, 0x918, 0xa0); in set_input()
1610 cx25840_write(client, 0x919, 0x01); in set_input()
1616 cx25840_write4(client, 0x910, 0); in set_input()
1617 cx25840_write4(client, 0x8d0, 0x63073); in set_input()
1620 cx25840_write4(client, 0x910, 0x12b000c9); in set_input()
1621 cx25840_write4(client, 0x8d0, 0x1f063870); in set_input()
1634 cx25840_write4(client, 0x124, 0x100); in set_input()
1641 cx25840_and_or(client, 0x803, ~0x10, 0x00); in set_input()
1650 static int set_v4lstd(struct i2c_client *client) in set_v4lstd() argument
1652 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); in set_v4lstd()
1680 v4l_dbg(1, cx25840_debug, client, in set_v4lstd()
1690 cx25840_and_or(client, 0x400, ~0xf, 1); in set_v4lstd()
1692 cx25840_and_or(client, 0x47b, ~6, 0); in set_v4lstd()
1694 cx25840_and_or(client, 0x400, ~0xf, fmt); in set_v4lstd()
1695 cx25840_and_or(client, 0x403, ~0x3, pal_m); in set_v4lstd()
1697 cx23888_std_setup(client); in set_v4lstd()
1699 cx25840_std_setup(client); in set_v4lstd()
1701 input_change(client); in set_v4lstd()
1711 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_s_ctrl() local
1715 cx25840_write(client, 0x414, ctrl->val - 128); in cx25840_s_ctrl()
1719 cx25840_write(client, 0x415, ctrl->val << 1); in cx25840_s_ctrl()
1724 cx25840_write(client, 0x418, ctrl->val << 1); in cx25840_s_ctrl()
1725 cx25840_write(client, 0x419, ctrl->val << 1); in cx25840_s_ctrl()
1727 cx25840_write(client, 0x420, ctrl->val << 1); in cx25840_s_ctrl()
1728 cx25840_write(client, 0x421, ctrl->val << 1); in cx25840_s_ctrl()
1734 cx25840_write(client, 0x41a, ctrl->val); in cx25840_s_ctrl()
1736 cx25840_write(client, 0x422, ctrl->val); in cx25840_s_ctrl()
1754 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_set_fmt() local
1766 v_src = (cx25840_read(client, 0x42a) & 0x3f) << 4; in cx25840_set_fmt()
1767 v_src |= (cx25840_read(client, 0x429) & 0xf0) >> 4; in cx25840_set_fmt()
1769 v_src = (cx25840_read(client, 0x476) & 0x3f) << 4; in cx25840_set_fmt()
1770 v_src |= (cx25840_read(client, 0x475) & 0xf0) >> 4; in cx25840_set_fmt()
1774 h_src = (cx25840_read(client, 0x426) & 0x3f) << 4; in cx25840_set_fmt()
1775 h_src |= (cx25840_read(client, 0x425) & 0xf0) >> 4; in cx25840_set_fmt()
1777 h_src = (cx25840_read(client, 0x472) & 0x3f) << 4; in cx25840_set_fmt()
1778 h_src |= (cx25840_read(client, 0x471) & 0xf0) >> 4; in cx25840_set_fmt()
1799 v4l_err(client, in cx25840_set_fmt()
1833 v4l_dbg(1, cx25840_debug, client, in cx25840_set_fmt()
1840 cx25840_write4(client, 0x434, hsc | (1 << 24)); in cx25840_set_fmt()
1842 cx25840_write4(client, 0x438, vsc | (1 << 19) | (filter << 16)); in cx25840_set_fmt()
1844 cx25840_write(client, 0x418, hsc & 0xff); in cx25840_set_fmt()
1845 cx25840_write(client, 0x419, (hsc >> 8) & 0xff); in cx25840_set_fmt()
1846 cx25840_write(client, 0x41a, hsc >> 16); in cx25840_set_fmt()
1848 cx25840_write(client, 0x41c, vsc & 0xff); in cx25840_set_fmt()
1849 cx25840_write(client, 0x41d, vsc >> 8); in cx25840_set_fmt()
1851 cx25840_write(client, 0x41e, 0x8 | filter); in cx25840_set_fmt()
1858 static void log_video_status(struct i2c_client *client) in log_video_status() argument
1869 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); in log_video_status()
1870 u8 vidfmt_sel = cx25840_read(client, 0x400) & 0xf; in log_video_status()
1871 u8 gen_stat1 = cx25840_read(client, 0x40d); in log_video_status()
1872 u8 gen_stat2 = cx25840_read(client, 0x40e); in log_video_status()
1875 v4l_info(client, "Video signal: %spresent\n", in log_video_status()
1877 v4l_info(client, "Detected format: %s\n", in log_video_status()
1880 v4l_info(client, "Specified standard: %s\n", in log_video_status()
1885 v4l_info(client, "Specified video input: Composite %d\n", in log_video_status()
1888 v4l_info(client, in log_video_status()
1893 v4l_info(client, "Specified audioclock freq: %d Hz\n", in log_video_status()
1899 static void log_audio_status(struct i2c_client *client) in log_audio_status() argument
1901 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); in log_audio_status()
1902 u8 download_ctl = cx25840_read(client, 0x803); in log_audio_status()
1903 u8 mod_det_stat0 = cx25840_read(client, 0x804); in log_audio_status()
1904 u8 mod_det_stat1 = cx25840_read(client, 0x805); in log_audio_status()
1905 u8 audio_config = cx25840_read(client, 0x808); in log_audio_status()
1906 u8 pref_mode = cx25840_read(client, 0x809); in log_audio_status()
1907 u8 afc0 = cx25840_read(client, 0x80b); in log_audio_status()
1908 u8 mute_ctl = cx25840_read(client, 0x8d3); in log_audio_status()
1943 v4l_info(client, "Detected audio mode: %s\n", p); in log_audio_status()
2012 v4l_info(client, "Detected audio standard: %s\n", p); in log_audio_status()
2013 v4l_info(client, "Audio microcontroller: %s\n", in log_audio_status()
2069 v4l_info(client, "Configured audio standard: %s\n", p); in log_audio_status()
2109 v4l_info(client, "Configured audio mode: %s\n", p); in log_audio_status()
2148 v4l_info(client, "Configured audio system: %s\n", p); in log_audio_status()
2152 v4l_info(client, "Specified audio input: Tuner (In%d)\n", in log_audio_status()
2155 v4l_info(client, "Specified audio input: External\n"); in log_audio_status()
2186 v4l_info(client, "Preferred audio mode: %s\n", p); in log_audio_status()
2202 v4l_info(client, "Selected 65 MHz format: %s\n", p); in log_audio_status()
2223 v4l_info(client, "Selected 45 MHz format: %s\n", p); in log_audio_status()
2297 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_reset() local
2300 cx25836_initialize(client); in cx25840_reset()
2302 cx23885_initialize(client); in cx25840_reset()
2304 cx231xx_initialize(client); in cx25840_reset()
2306 cx25840_initialize(client); in cx25840_reset()
2342 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_g_register() local
2345 reg->val = cx25840_read(client, reg->reg & 0x0fff); in cx25840_g_register()
2352 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_s_register() local
2354 cx25840_write(client, reg->reg & 0x0fff, reg->val & 0xff); in cx25840_s_register()
2362 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_s_audio_stream() local
2368 v4l_dbg(1, cx25840_debug, client, "%s audio output\n", in cx25840_s_audio_stream()
2372 v = cx25840_read(client, 0x115) | 0x80; in cx25840_s_audio_stream()
2373 cx25840_write(client, 0x115, v); in cx25840_s_audio_stream()
2374 v = cx25840_read(client, 0x116) | 0x03; in cx25840_s_audio_stream()
2375 cx25840_write(client, 0x116, v); in cx25840_s_audio_stream()
2377 v = cx25840_read(client, 0x115) & ~(0x80); in cx25840_s_audio_stream()
2378 cx25840_write(client, 0x115, v); in cx25840_s_audio_stream()
2379 v = cx25840_read(client, 0x116) & ~(0x03); in cx25840_s_audio_stream()
2380 cx25840_write(client, 0x116, v); in cx25840_s_audio_stream()
2388 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_s_stream() local
2391 v4l_dbg(1, cx25840_debug, client, "%s video output\n", in cx25840_s_stream()
2405 v = cx25840_read(client, 0x115) | 0x0c; in cx25840_s_stream()
2406 cx25840_write(client, 0x115, v); in cx25840_s_stream()
2407 v = cx25840_read(client, 0x116) | 0x04; in cx25840_s_stream()
2408 cx25840_write(client, 0x116, v); in cx25840_s_stream()
2410 v = cx25840_read(client, 0x115) & ~(0x0c); in cx25840_s_stream()
2411 cx25840_write(client, 0x115, v); in cx25840_s_stream()
2412 v = cx25840_read(client, 0x116) & ~(0x04); in cx25840_s_stream()
2413 cx25840_write(client, 0x116, v); in cx25840_s_stream()
2421 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_querystd() local
2444 u32 fmt = (cx25840_read4(client, 0x40c) >> 8) & 0xf; in cx25840_querystd()
2447 v4l_dbg(1, cx25840_debug, client, in cx25840_querystd()
2456 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_g_input_status() local
2464 if ((cx25840_read4(client, 0x40c) & 0x00010000) == 0) in cx25840_g_input_status()
2482 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_s_std() local
2488 return set_v4lstd(client); in cx25840_s_std()
2503 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_s_video_routing() local
2506 cx23888_std_setup(client); in cx25840_s_video_routing()
2510 cx25840_vconfig_apply(client); in cx25840_s_video_routing()
2513 return set_input(client, input, state->aud_input); in cx25840_s_video_routing()
2520 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_s_audio_routing() local
2523 cx23888_std_setup(client); in cx25840_s_audio_routing()
2524 return set_input(client, state->vid_input, input); in cx25840_s_audio_routing()
2530 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_s_frequency() local
2532 input_change(client); in cx25840_s_frequency()
2539 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_g_tuner() local
2540 u8 vpres = cx25840_read(client, 0x40e) & 0x20; in cx25840_g_tuner()
2554 mode = cx25840_read(client, 0x804); in cx25840_g_tuner()
2576 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_s_tuner() local
2588 cx25840_and_or(client, 0x809, ~0xf, 0x00); in cx25840_s_tuner()
2597 cx25840_and_or(client, 0x809, ~0xf, 0x04); in cx25840_s_tuner()
2605 cx25840_and_or(client, 0x809, ~0xf, 0x07); in cx25840_s_tuner()
2613 cx25840_and_or(client, 0x809, ~0xf, 0x01); in cx25840_s_tuner()
2625 struct i2c_client *client = v4l2_get_subdevdata(sd); in cx25840_log_status() local
2627 log_video_status(client); in cx25840_log_status()
2629 log_audio_status(client); in cx25840_log_status()
3531 static void cx23885_dif_setup(struct i2c_client *client, u32 ifHz) in cx23885_dif_setup() argument
3537 v4l_dbg(1, cx25840_debug, client, "%s(%d)\n", __func__, ifHz); in cx23885_dif_setup()
3544 cx25840_write4(client, DIF_PLL_FREQ_WORD, pll_freq_word); in cx23885_dif_setup()
3555 v4l_dbg(1, cx25840_debug, client, "%s(%d) again\n", __func__, ifHz); in cx23885_dif_setup()
3558 cx25840_write4(client, DIF_BPF_COEFF01, coeffs[0]); in cx23885_dif_setup()
3559 cx25840_write4(client, DIF_BPF_COEFF23, coeffs[1]); in cx23885_dif_setup()
3560 cx25840_write4(client, DIF_BPF_COEFF45, coeffs[2]); in cx23885_dif_setup()
3561 cx25840_write4(client, DIF_BPF_COEFF67, coeffs[3]); in cx23885_dif_setup()
3562 cx25840_write4(client, DIF_BPF_COEFF89, coeffs[4]); in cx23885_dif_setup()
3563 cx25840_write4(client, DIF_BPF_COEFF1011, coeffs[5]); in cx23885_dif_setup()
3564 cx25840_write4(client, DIF_BPF_COEFF1213, coeffs[6]); in cx23885_dif_setup()
3565 cx25840_write4(client, DIF_BPF_COEFF1415, coeffs[7]); in cx23885_dif_setup()
3566 cx25840_write4(client, DIF_BPF_COEFF1617, coeffs[8]); in cx23885_dif_setup()
3567 cx25840_write4(client, DIF_BPF_COEFF1819, coeffs[9]); in cx23885_dif_setup()
3568 cx25840_write4(client, DIF_BPF_COEFF2021, coeffs[10]); in cx23885_dif_setup()
3569 cx25840_write4(client, DIF_BPF_COEFF2223, coeffs[11]); in cx23885_dif_setup()
3570 cx25840_write4(client, DIF_BPF_COEFF2425, coeffs[12]); in cx23885_dif_setup()
3571 cx25840_write4(client, DIF_BPF_COEFF2627, coeffs[13]); in cx23885_dif_setup()
3572 cx25840_write4(client, DIF_BPF_COEFF2829, coeffs[14]); in cx23885_dif_setup()
3573 cx25840_write4(client, DIF_BPF_COEFF3031, coeffs[15]); in cx23885_dif_setup()
3574 cx25840_write4(client, DIF_BPF_COEFF3233, coeffs[16]); in cx23885_dif_setup()
3575 cx25840_write4(client, DIF_BPF_COEFF3435, coeffs[17]); in cx23885_dif_setup()
3576 cx25840_write4(client, DIF_BPF_COEFF36, coeffs[18]); in cx23885_dif_setup()
3579 static void cx23888_std_setup(struct i2c_client *client) in cx23888_std_setup() argument
3581 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); in cx23888_std_setup()
3585 cx25840_write4(client, 0x478, 0x6628021F); in cx23888_std_setup()
3586 cx25840_write4(client, 0x400, 0x0); in cx23888_std_setup()
3587 cx25840_write4(client, 0x4b4, 0x20524030); in cx23888_std_setup()
3588 cx25840_write4(client, 0x47c, 0x010a8263); in cx23888_std_setup()
3591 v4l_dbg(1, cx25840_debug, client, "%s() Selecting NTSC", in cx23888_std_setup()
3595 cx25840_write4(client, 0x428, 0x1e1e601a); in cx23888_std_setup()
3596 cx25840_write4(client, 0x424, 0x5b2d007a); in cx23888_std_setup()
3599 cx25840_write4(client, 0x304, 0x6503bc0c); in cx23888_std_setup()
3600 cx25840_write4(client, 0x308, 0xbd038c85); in cx23888_std_setup()
3601 cx25840_write4(client, 0x30c, 0x1db4640a); in cx23888_std_setup()
3602 cx25840_write4(client, 0x310, 0x00008800); in cx23888_std_setup()
3603 cx25840_write4(client, 0x314, 0x44400400); in cx23888_std_setup()
3604 cx25840_write4(client, 0x32c, 0x0c800800); in cx23888_std_setup()
3605 cx25840_write4(client, 0x330, 0x27000100); in cx23888_std_setup()
3606 cx25840_write4(client, 0x334, 0x1f296e1f); in cx23888_std_setup()
3607 cx25840_write4(client, 0x338, 0x009f50c1); in cx23888_std_setup()
3608 cx25840_write4(client, 0x340, 0x1befbf06); in cx23888_std_setup()
3609 cx25840_write4(client, 0x344, 0x000035e8); in cx23888_std_setup()
3615 v4l_dbg(1, cx25840_debug, client, "%s() Selecting PAL-BG", in cx23888_std_setup()
3619 cx25840_write4(client, 0x428, 0x28244024); in cx23888_std_setup()
3620 cx25840_write4(client, 0x424, 0x5d2d0084); in cx23888_std_setup()
3623 cx25840_write4(client, 0x304, 0x6503bc0c); in cx23888_std_setup()
3624 cx25840_write4(client, 0x308, 0xbd038c85); in cx23888_std_setup()
3625 cx25840_write4(client, 0x30c, 0x1db4640a); in cx23888_std_setup()
3626 cx25840_write4(client, 0x310, 0x00008800); in cx23888_std_setup()
3627 cx25840_write4(client, 0x314, 0x44400600); in cx23888_std_setup()
3628 cx25840_write4(client, 0x32c, 0x0c800800); in cx23888_std_setup()
3629 cx25840_write4(client, 0x330, 0x27000100); in cx23888_std_setup()
3630 cx25840_write4(client, 0x334, 0x213530ec); in cx23888_std_setup()
3631 cx25840_write4(client, 0x338, 0x00a65ba8); in cx23888_std_setup()
3632 cx25840_write4(client, 0x340, 0x1befbf06); in cx23888_std_setup()
3633 cx25840_write4(client, 0x344, 0x000035e8); in cx23888_std_setup()
3639 cx23885_dif_setup(client, ifHz); in cx23888_std_setup()
3644 set_input(client, state->vid_input, state->aud_input); in cx23888_std_setup()
3712 static u32 get_cx2388x_ident(struct i2c_client *client) in get_cx2388x_ident() argument
3717 cx25840_write(client, 0x000, 0); in get_cx2388x_ident()
3727 if (cx25840_read4(client, 0x204) & 0xffff) { in get_cx2388x_ident()
3732 ret = cx25840_read4(client, 0x300); in get_cx2388x_ident()
3743 } else if (cx25840_read4(client, 0x300) & 0x0fffffff) { in get_cx2388x_ident()
3747 v4l_err(client, "Unable to detect h/w, assuming cx23887\n"); in get_cx2388x_ident()
3752 cx25840_write(client, 0x000, 2); in get_cx2388x_ident()
3756 static int cx25840_probe(struct i2c_client *client) in cx25840_probe() argument
3768 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) in cx25840_probe()
3771 v4l_dbg(1, cx25840_debug, client, in cx25840_probe()
3772 "detecting cx25840 client on address 0x%x\n", in cx25840_probe()
3773 client->addr << 1); in cx25840_probe()
3775 device_id = cx25840_read(client, 0x101) << 8; in cx25840_probe()
3776 device_id |= cx25840_read(client, 0x100); in cx25840_probe()
3777 v4l_dbg(1, cx25840_debug, client, "device_id = 0x%04x\n", device_id); in cx25840_probe()
3788 id = get_cx2388x_ident(client); in cx25840_probe()
3793 v4l_err(client, in cx25840_probe()
3795 client->addr << 1, client->adapter->name); in cx25840_probe()
3796 v4l_err(client, in cx25840_probe()
3800 v4l_dbg(1, cx25840_debug, client, "cx25840 not found\n"); in cx25840_probe()
3804 state = devm_kzalloc(&client->dev, sizeof(*state), GFP_KERNEL); in cx25840_probe()
3809 v4l2_i2c_subdev_init(sd, client, &cx25840_ops); in cx25840_probe()
3834 v4l_info(client, "failed to initialize media entity!\n"); in cx25840_probe()
3841 v4l_info(client, "cx23885 A/V decoder found @ 0x%x (%s)\n", in cx25840_probe()
3842 client->addr << 1, client->adapter->name); in cx25840_probe()
3845 v4l_info(client, "cx23887 A/V decoder found @ 0x%x (%s)\n", in cx25840_probe()
3846 client->addr << 1, client->adapter->name); in cx25840_probe()
3849 v4l_info(client, "cx23888 A/V decoder found @ 0x%x (%s)\n", in cx25840_probe()
3850 client->addr << 1, client->adapter->name); in cx25840_probe()
3853 v4l_info(client, "cx%d A/V decoder found @ 0x%x (%s)\n", in cx25840_probe()
3854 device_id, client->addr << 1, client->adapter->name); in cx25840_probe()
3864 v4l_info(client, "cx25%3x-2%x found @ 0x%x (%s)\n", in cx25840_probe()
3868 client->addr << 1, client->adapter->name); in cx25840_probe()
3873 v4l_info(client, "cx25%3x-%x found @ 0x%x (%s)\n", in cx25840_probe()
3875 client->addr << 1, client->adapter->name); in cx25840_probe()
3879 state->c = client; in cx25840_probe()
3899 default_volume = cx25840_read(client, 0x8d4); in cx25840_probe()
3908 cx25840_write(client, 0x8d4, 228); in cx25840_probe()
3912 cx25840_write(client, 0x8d4, 20); in cx25840_probe()
3946 if (client->dev.platform_data) { in cx25840_probe()
3947 struct cx25840_platform_data *pdata = client->dev.platform_data; in cx25840_probe()
3956 static void cx25840_remove(struct i2c_client *client) in cx25840_remove() argument
3958 struct v4l2_subdev *sd = i2c_get_clientdata(client); in cx25840_remove()