diff options
Diffstat (limited to 'drivers/media/i2c/saa7115.c')
-rw-r--r-- | drivers/media/i2c/saa7115.c | 105 |
1 files changed, 48 insertions, 57 deletions
diff --git a/drivers/media/i2c/saa7115.c b/drivers/media/i2c/saa7115.c index 4daa81c55a82..90c43f3fb0f1 100644 --- a/drivers/media/i2c/saa7115.c +++ b/drivers/media/i2c/saa7115.c | |||
@@ -46,7 +46,6 @@ | |||
46 | #include <linux/videodev2.h> | 46 | #include <linux/videodev2.h> |
47 | #include <media/v4l2-device.h> | 47 | #include <media/v4l2-device.h> |
48 | #include <media/v4l2-ctrls.h> | 48 | #include <media/v4l2-ctrls.h> |
49 | #include <media/v4l2-chip-ident.h> | ||
50 | #include <media/saa7115.h> | 49 | #include <media/saa7115.h> |
51 | #include <asm/div64.h> | 50 | #include <asm/div64.h> |
52 | 51 | ||
@@ -63,6 +62,16 @@ module_param(debug, bool, 0644); | |||
63 | MODULE_PARM_DESC(debug, "Debug level (0-1)"); | 62 | MODULE_PARM_DESC(debug, "Debug level (0-1)"); |
64 | 63 | ||
65 | 64 | ||
65 | enum saa711x_model { | ||
66 | SAA7111A, | ||
67 | SAA7111, | ||
68 | SAA7113, | ||
69 | GM7113C, | ||
70 | SAA7114, | ||
71 | SAA7115, | ||
72 | SAA7118, | ||
73 | }; | ||
74 | |||
66 | struct saa711x_state { | 75 | struct saa711x_state { |
67 | struct v4l2_subdev sd; | 76 | struct v4l2_subdev sd; |
68 | struct v4l2_ctrl_handler hdl; | 77 | struct v4l2_ctrl_handler hdl; |
@@ -80,7 +89,7 @@ struct saa711x_state { | |||
80 | int radio; | 89 | int radio; |
81 | int width; | 90 | int width; |
82 | int height; | 91 | int height; |
83 | u32 ident; | 92 | enum saa711x_model ident; |
84 | u32 audclk_freq; | 93 | u32 audclk_freq; |
85 | u32 crystal_freq; | 94 | u32 crystal_freq; |
86 | bool ucgc; | 95 | bool ucgc; |
@@ -111,10 +120,10 @@ static inline int saa711x_write(struct v4l2_subdev *sd, u8 reg, u8 value) | |||
111 | /* Sanity routine to check if a register is present */ | 120 | /* Sanity routine to check if a register is present */ |
112 | static int saa711x_has_reg(const int id, const u8 reg) | 121 | static int saa711x_has_reg(const int id, const u8 reg) |
113 | { | 122 | { |
114 | if (id == V4L2_IDENT_SAA7111) | 123 | if (id == SAA7111) |
115 | return reg < 0x20 && reg != 0x01 && reg != 0x0f && | 124 | return reg < 0x20 && reg != 0x01 && reg != 0x0f && |
116 | (reg < 0x13 || reg > 0x19) && reg != 0x1d && reg != 0x1e; | 125 | (reg < 0x13 || reg > 0x19) && reg != 0x1d && reg != 0x1e; |
117 | if (id == V4L2_IDENT_SAA7111A) | 126 | if (id == SAA7111A) |
118 | return reg < 0x20 && reg != 0x01 && reg != 0x0f && | 127 | return reg < 0x20 && reg != 0x01 && reg != 0x0f && |
119 | reg != 0x14 && reg != 0x18 && reg != 0x19 && | 128 | reg != 0x14 && reg != 0x18 && reg != 0x19 && |
120 | reg != 0x1d && reg != 0x1e; | 129 | reg != 0x1d && reg != 0x1e; |
@@ -127,18 +136,18 @@ static int saa711x_has_reg(const int id, const u8 reg) | |||
127 | return 0; | 136 | return 0; |
128 | 137 | ||
129 | switch (id) { | 138 | switch (id) { |
130 | case V4L2_IDENT_GM7113C: | 139 | case GM7113C: |
131 | return reg != 0x14 && (reg < 0x18 || reg > 0x1e) && reg < 0x20; | 140 | return reg != 0x14 && (reg < 0x18 || reg > 0x1e) && reg < 0x20; |
132 | case V4L2_IDENT_SAA7113: | 141 | case SAA7113: |
133 | return reg != 0x14 && (reg < 0x18 || reg > 0x1e) && (reg < 0x20 || reg > 0x3f) && | 142 | return reg != 0x14 && (reg < 0x18 || reg > 0x1e) && (reg < 0x20 || reg > 0x3f) && |
134 | reg != 0x5d && reg < 0x63; | 143 | reg != 0x5d && reg < 0x63; |
135 | case V4L2_IDENT_SAA7114: | 144 | case SAA7114: |
136 | return (reg < 0x1a || reg > 0x1e) && (reg < 0x20 || reg > 0x2f) && | 145 | return (reg < 0x1a || reg > 0x1e) && (reg < 0x20 || reg > 0x2f) && |
137 | (reg < 0x63 || reg > 0x7f) && reg != 0x33 && reg != 0x37 && | 146 | (reg < 0x63 || reg > 0x7f) && reg != 0x33 && reg != 0x37 && |
138 | reg != 0x81 && reg < 0xf0; | 147 | reg != 0x81 && reg < 0xf0; |
139 | case V4L2_IDENT_SAA7115: | 148 | case SAA7115: |
140 | return (reg < 0x20 || reg > 0x2f) && reg != 0x65 && (reg < 0xfc || reg > 0xfe); | 149 | return (reg < 0x20 || reg > 0x2f) && reg != 0x65 && (reg < 0xfc || reg > 0xfe); |
141 | case V4L2_IDENT_SAA7118: | 150 | case SAA7118: |
142 | return (reg < 0x1a || reg > 0x1d) && (reg < 0x20 || reg > 0x22) && | 151 | return (reg < 0x1a || reg > 0x1d) && (reg < 0x20 || reg > 0x22) && |
143 | (reg < 0x26 || reg > 0x28) && reg != 0x33 && reg != 0x37 && | 152 | (reg < 0x26 || reg > 0x28) && reg != 0x33 && reg != 0x37 && |
144 | (reg < 0x63 || reg > 0x7f) && reg != 0x81 && reg < 0xf0; | 153 | (reg < 0x63 || reg > 0x7f) && reg != 0x81 && reg < 0xf0; |
@@ -955,14 +964,14 @@ static void saa711x_set_v4lstd(struct v4l2_subdev *sd, v4l2_std_id std) | |||
955 | // This works for NTSC-M, SECAM-L and the 50Hz PAL variants. | 964 | // This works for NTSC-M, SECAM-L and the 50Hz PAL variants. |
956 | if (std & V4L2_STD_525_60) { | 965 | if (std & V4L2_STD_525_60) { |
957 | v4l2_dbg(1, debug, sd, "decoder set standard 60 Hz\n"); | 966 | v4l2_dbg(1, debug, sd, "decoder set standard 60 Hz\n"); |
958 | if (state->ident == V4L2_IDENT_GM7113C) | 967 | if (state->ident == GM7113C) |
959 | saa711x_writeregs(sd, gm7113c_cfg_60hz_video); | 968 | saa711x_writeregs(sd, gm7113c_cfg_60hz_video); |
960 | else | 969 | else |
961 | saa711x_writeregs(sd, saa7115_cfg_60hz_video); | 970 | saa711x_writeregs(sd, saa7115_cfg_60hz_video); |
962 | saa711x_set_size(sd, 720, 480); | 971 | saa711x_set_size(sd, 720, 480); |
963 | } else { | 972 | } else { |
964 | v4l2_dbg(1, debug, sd, "decoder set standard 50 Hz\n"); | 973 | v4l2_dbg(1, debug, sd, "decoder set standard 50 Hz\n"); |
965 | if (state->ident == V4L2_IDENT_GM7113C) | 974 | if (state->ident == GM7113C) |
966 | saa711x_writeregs(sd, gm7113c_cfg_50hz_video); | 975 | saa711x_writeregs(sd, gm7113c_cfg_50hz_video); |
967 | else | 976 | else |
968 | saa711x_writeregs(sd, saa7115_cfg_50hz_video); | 977 | saa711x_writeregs(sd, saa7115_cfg_50hz_video); |
@@ -978,8 +987,8 @@ static void saa711x_set_v4lstd(struct v4l2_subdev *sd, v4l2_std_id std) | |||
978 | 011 NTSC N (3.58MHz) PAL M (3.58MHz) | 987 | 011 NTSC N (3.58MHz) PAL M (3.58MHz) |
979 | 100 reserved NTSC-Japan (3.58MHz) | 988 | 100 reserved NTSC-Japan (3.58MHz) |
980 | */ | 989 | */ |
981 | if (state->ident <= V4L2_IDENT_SAA7113 || | 990 | if (state->ident <= SAA7113 || |
982 | state->ident == V4L2_IDENT_GM7113C) { | 991 | state->ident == GM7113C) { |
983 | u8 reg = saa711x_read(sd, R_0E_CHROMA_CNTL_1) & 0x8f; | 992 | u8 reg = saa711x_read(sd, R_0E_CHROMA_CNTL_1) & 0x8f; |
984 | 993 | ||
985 | if (std == V4L2_STD_PAL_M) { | 994 | if (std == V4L2_STD_PAL_M) { |
@@ -998,9 +1007,8 @@ static void saa711x_set_v4lstd(struct v4l2_subdev *sd, v4l2_std_id std) | |||
998 | /* restart task B if needed */ | 1007 | /* restart task B if needed */ |
999 | int taskb = saa711x_read(sd, R_80_GLOBAL_CNTL_1) & 0x10; | 1008 | int taskb = saa711x_read(sd, R_80_GLOBAL_CNTL_1) & 0x10; |
1000 | 1009 | ||
1001 | if (taskb && state->ident == V4L2_IDENT_SAA7114) { | 1010 | if (taskb && state->ident == SAA7114) |
1002 | saa711x_writeregs(sd, saa7115_cfg_vbi_on); | 1011 | saa711x_writeregs(sd, saa7115_cfg_vbi_on); |
1003 | } | ||
1004 | 1012 | ||
1005 | /* switch audio mode too! */ | 1013 | /* switch audio mode too! */ |
1006 | saa711x_s_clock_freq(sd, state->audclk_freq); | 1014 | saa711x_s_clock_freq(sd, state->audclk_freq); |
@@ -1022,7 +1030,7 @@ static void saa711x_set_lcr(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_forma | |||
1022 | 1030 | ||
1023 | #else | 1031 | #else |
1024 | /* SAA7113 and SAA7118 also should support VBI - Need testing */ | 1032 | /* SAA7113 and SAA7118 also should support VBI - Need testing */ |
1025 | if (state->ident != V4L2_IDENT_SAA7115) | 1033 | if (state->ident != SAA7115) |
1026 | return; | 1034 | return; |
1027 | #endif | 1035 | #endif |
1028 | 1036 | ||
@@ -1244,14 +1252,14 @@ static int saa711x_s_routing(struct v4l2_subdev *sd, | |||
1244 | u32 input, u32 output, u32 config) | 1252 | u32 input, u32 output, u32 config) |
1245 | { | 1253 | { |
1246 | struct saa711x_state *state = to_state(sd); | 1254 | struct saa711x_state *state = to_state(sd); |
1247 | u8 mask = (state->ident <= V4L2_IDENT_SAA7111A) ? 0xf8 : 0xf0; | 1255 | u8 mask = (state->ident <= SAA7111A) ? 0xf8 : 0xf0; |
1248 | 1256 | ||
1249 | v4l2_dbg(1, debug, sd, "decoder set input %d output %d\n", | 1257 | v4l2_dbg(1, debug, sd, "decoder set input %d output %d\n", |
1250 | input, output); | 1258 | input, output); |
1251 | 1259 | ||
1252 | /* saa7111/3 does not have these inputs */ | 1260 | /* saa7111/3 does not have these inputs */ |
1253 | if ((state->ident <= V4L2_IDENT_SAA7113 || | 1261 | if ((state->ident <= SAA7113 || |
1254 | state->ident == V4L2_IDENT_GM7113C) && | 1262 | state->ident == GM7113C) && |
1255 | (input == SAA7115_COMPOSITE4 || | 1263 | (input == SAA7115_COMPOSITE4 || |
1256 | input == SAA7115_COMPOSITE5)) { | 1264 | input == SAA7115_COMPOSITE5)) { |
1257 | return -EINVAL; | 1265 | return -EINVAL; |
@@ -1266,7 +1274,7 @@ static int saa711x_s_routing(struct v4l2_subdev *sd, | |||
1266 | state->input = input; | 1274 | state->input = input; |
1267 | 1275 | ||
1268 | /* saa7111 has slightly different input numbering */ | 1276 | /* saa7111 has slightly different input numbering */ |
1269 | if (state->ident <= V4L2_IDENT_SAA7111A) { | 1277 | if (state->ident <= SAA7111A) { |
1270 | if (input >= SAA7115_COMPOSITE4) | 1278 | if (input >= SAA7115_COMPOSITE4) |
1271 | input -= 2; | 1279 | input -= 2; |
1272 | /* saa7111 specific */ | 1280 | /* saa7111 specific */ |
@@ -1289,13 +1297,13 @@ static int saa711x_s_routing(struct v4l2_subdev *sd, | |||
1289 | (state->input >= SAA7115_SVIDEO0 ? 0x80 : 0x0)); | 1297 | (state->input >= SAA7115_SVIDEO0 ? 0x80 : 0x0)); |
1290 | 1298 | ||
1291 | state->output = output; | 1299 | state->output = output; |
1292 | if (state->ident == V4L2_IDENT_SAA7114 || | 1300 | if (state->ident == SAA7114 || |
1293 | state->ident == V4L2_IDENT_SAA7115) { | 1301 | state->ident == SAA7115) { |
1294 | saa711x_write(sd, R_83_X_PORT_I_O_ENA_AND_OUT_CLK, | 1302 | saa711x_write(sd, R_83_X_PORT_I_O_ENA_AND_OUT_CLK, |
1295 | (saa711x_read(sd, R_83_X_PORT_I_O_ENA_AND_OUT_CLK) & 0xfe) | | 1303 | (saa711x_read(sd, R_83_X_PORT_I_O_ENA_AND_OUT_CLK) & 0xfe) | |
1296 | (state->output & 0x01)); | 1304 | (state->output & 0x01)); |
1297 | } | 1305 | } |
1298 | if (state->ident > V4L2_IDENT_SAA7111A) { | 1306 | if (state->ident > SAA7111A) { |
1299 | if (config & SAA7115_IDQ_IS_DEFAULT) | 1307 | if (config & SAA7115_IDQ_IS_DEFAULT) |
1300 | saa711x_write(sd, R_85_I_PORT_SIGNAL_POLAR, 0x20); | 1308 | saa711x_write(sd, R_85_I_PORT_SIGNAL_POLAR, 0x20); |
1301 | else | 1309 | else |
@@ -1308,7 +1316,7 @@ static int saa711x_s_gpio(struct v4l2_subdev *sd, u32 val) | |||
1308 | { | 1316 | { |
1309 | struct saa711x_state *state = to_state(sd); | 1317 | struct saa711x_state *state = to_state(sd); |
1310 | 1318 | ||
1311 | if (state->ident > V4L2_IDENT_SAA7111A) | 1319 | if (state->ident > SAA7111A) |
1312 | return -EINVAL; | 1320 | return -EINVAL; |
1313 | saa711x_write(sd, 0x11, (saa711x_read(sd, 0x11) & 0x7f) | | 1321 | saa711x_write(sd, 0x11, (saa711x_read(sd, 0x11) & 0x7f) | |
1314 | (val ? 0x80 : 0)); | 1322 | (val ? 0x80 : 0)); |
@@ -1398,7 +1406,7 @@ static int saa711x_querystd(struct v4l2_subdev *sd, v4l2_std_id *std) | |||
1398 | 1406 | ||
1399 | reg1f = saa711x_read(sd, R_1F_STATUS_BYTE_2_VD_DEC); | 1407 | reg1f = saa711x_read(sd, R_1F_STATUS_BYTE_2_VD_DEC); |
1400 | 1408 | ||
1401 | if (state->ident == V4L2_IDENT_SAA7115) { | 1409 | if (state->ident == SAA7115) { |
1402 | reg1e = saa711x_read(sd, R_1E_STATUS_BYTE_1_VD_DEC); | 1410 | reg1e = saa711x_read(sd, R_1E_STATUS_BYTE_1_VD_DEC); |
1403 | 1411 | ||
1404 | v4l2_dbg(1, debug, sd, "Status byte 1 (0x1e)=0x%02x\n", reg1e); | 1412 | v4l2_dbg(1, debug, sd, "Status byte 1 (0x1e)=0x%02x\n", reg1e); |
@@ -1449,7 +1457,7 @@ static int saa711x_g_input_status(struct v4l2_subdev *sd, u32 *status) | |||
1449 | int reg1f; | 1457 | int reg1f; |
1450 | 1458 | ||
1451 | *status = V4L2_IN_ST_NO_SIGNAL; | 1459 | *status = V4L2_IN_ST_NO_SIGNAL; |
1452 | if (state->ident == V4L2_IDENT_SAA7115) | 1460 | if (state->ident == SAA7115) |
1453 | reg1e = saa711x_read(sd, R_1E_STATUS_BYTE_1_VD_DEC); | 1461 | reg1e = saa711x_read(sd, R_1E_STATUS_BYTE_1_VD_DEC); |
1454 | reg1f = saa711x_read(sd, R_1F_STATUS_BYTE_2_VD_DEC); | 1462 | reg1f = saa711x_read(sd, R_1F_STATUS_BYTE_2_VD_DEC); |
1455 | if ((reg1f & 0xc1) == 0x81 && (reg1e & 0xc0) == 0x80) | 1463 | if ((reg1f & 0xc1) == 0x81 && (reg1e & 0xc0) == 0x80) |
@@ -1460,10 +1468,6 @@ static int saa711x_g_input_status(struct v4l2_subdev *sd, u32 *status) | |||
1460 | #ifdef CONFIG_VIDEO_ADV_DEBUG | 1468 | #ifdef CONFIG_VIDEO_ADV_DEBUG |
1461 | static int saa711x_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg) | 1469 | static int saa711x_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg) |
1462 | { | 1470 | { |
1463 | struct i2c_client *client = v4l2_get_subdevdata(sd); | ||
1464 | |||
1465 | if (!v4l2_chip_match_i2c_client(client, ®->match)) | ||
1466 | return -EINVAL; | ||
1467 | reg->val = saa711x_read(sd, reg->reg & 0xff); | 1471 | reg->val = saa711x_read(sd, reg->reg & 0xff); |
1468 | reg->size = 1; | 1472 | reg->size = 1; |
1469 | return 0; | 1473 | return 0; |
@@ -1471,23 +1475,11 @@ static int saa711x_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register * | |||
1471 | 1475 | ||
1472 | static int saa711x_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg) | 1476 | static int saa711x_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg) |
1473 | { | 1477 | { |
1474 | struct i2c_client *client = v4l2_get_subdevdata(sd); | ||
1475 | |||
1476 | if (!v4l2_chip_match_i2c_client(client, ®->match)) | ||
1477 | return -EINVAL; | ||
1478 | saa711x_write(sd, reg->reg & 0xff, reg->val & 0xff); | 1478 | saa711x_write(sd, reg->reg & 0xff, reg->val & 0xff); |
1479 | return 0; | 1479 | return 0; |
1480 | } | 1480 | } |
1481 | #endif | 1481 | #endif |
1482 | 1482 | ||
1483 | static int saa711x_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip) | ||
1484 | { | ||
1485 | struct saa711x_state *state = to_state(sd); | ||
1486 | struct i2c_client *client = v4l2_get_subdevdata(sd); | ||
1487 | |||
1488 | return v4l2_chip_ident_i2c_client(client, chip, state->ident, 0); | ||
1489 | } | ||
1490 | |||
1491 | static int saa711x_log_status(struct v4l2_subdev *sd) | 1483 | static int saa711x_log_status(struct v4l2_subdev *sd) |
1492 | { | 1484 | { |
1493 | struct saa711x_state *state = to_state(sd); | 1485 | struct saa711x_state *state = to_state(sd); |
@@ -1496,7 +1488,7 @@ static int saa711x_log_status(struct v4l2_subdev *sd) | |||
1496 | int vcr; | 1488 | int vcr; |
1497 | 1489 | ||
1498 | v4l2_info(sd, "Audio frequency: %d Hz\n", state->audclk_freq); | 1490 | v4l2_info(sd, "Audio frequency: %d Hz\n", state->audclk_freq); |
1499 | if (state->ident != V4L2_IDENT_SAA7115) { | 1491 | if (state->ident != SAA7115) { |
1500 | /* status for the saa7114 */ | 1492 | /* status for the saa7114 */ |
1501 | reg1f = saa711x_read(sd, R_1F_STATUS_BYTE_2_VD_DEC); | 1493 | reg1f = saa711x_read(sd, R_1F_STATUS_BYTE_2_VD_DEC); |
1502 | signalOk = (reg1f & 0xc1) == 0x81; | 1494 | signalOk = (reg1f & 0xc1) == 0x81; |
@@ -1547,7 +1539,6 @@ static const struct v4l2_ctrl_ops saa711x_ctrl_ops = { | |||
1547 | 1539 | ||
1548 | static const struct v4l2_subdev_core_ops saa711x_core_ops = { | 1540 | static const struct v4l2_subdev_core_ops saa711x_core_ops = { |
1549 | .log_status = saa711x_log_status, | 1541 | .log_status = saa711x_log_status, |
1550 | .g_chip_ident = saa711x_g_chip_ident, | ||
1551 | .g_ext_ctrls = v4l2_subdev_g_ext_ctrls, | 1542 | .g_ext_ctrls = v4l2_subdev_g_ext_ctrls, |
1552 | .try_ext_ctrls = v4l2_subdev_try_ext_ctrls, | 1543 | .try_ext_ctrls = v4l2_subdev_try_ext_ctrls, |
1553 | .s_ext_ctrls = v4l2_subdev_s_ext_ctrls, | 1544 | .s_ext_ctrls = v4l2_subdev_s_ext_ctrls, |
@@ -1650,21 +1641,21 @@ static int saa711x_detect_chip(struct i2c_client *client, | |||
1650 | if (chip_ver[0] & 0xf0) { | 1641 | if (chip_ver[0] & 0xf0) { |
1651 | snprintf(name, CHIP_VER_SIZE, "saa711%ca", chip_id); | 1642 | snprintf(name, CHIP_VER_SIZE, "saa711%ca", chip_id); |
1652 | v4l_info(client, "saa7111a variant found\n"); | 1643 | v4l_info(client, "saa7111a variant found\n"); |
1653 | return V4L2_IDENT_SAA7111A; | 1644 | return SAA7111A; |
1654 | } | 1645 | } |
1655 | return V4L2_IDENT_SAA7111; | 1646 | return SAA7111; |
1656 | case '3': | 1647 | case '3': |
1657 | return V4L2_IDENT_SAA7113; | 1648 | return SAA7113; |
1658 | case '4': | 1649 | case '4': |
1659 | return V4L2_IDENT_SAA7114; | 1650 | return SAA7114; |
1660 | case '5': | 1651 | case '5': |
1661 | return V4L2_IDENT_SAA7115; | 1652 | return SAA7115; |
1662 | case '8': | 1653 | case '8': |
1663 | return V4L2_IDENT_SAA7118; | 1654 | return SAA7118; |
1664 | default: | 1655 | default: |
1665 | v4l2_info(client, | 1656 | v4l2_info(client, |
1666 | "WARNING: Philips/NXP chip unknown - Falling back to saa7111\n"); | 1657 | "WARNING: Philips/NXP chip unknown - Falling back to saa7111\n"); |
1667 | return V4L2_IDENT_SAA7111; | 1658 | return SAA7111; |
1668 | } | 1659 | } |
1669 | } | 1660 | } |
1670 | 1661 | ||
@@ -1695,7 +1686,7 @@ static int saa711x_detect_chip(struct i2c_client *client, | |||
1695 | "It seems to be a %s chip (%*ph) @ 0x%x.\n", | 1686 | "It seems to be a %s chip (%*ph) @ 0x%x.\n", |
1696 | name, 16, chip_ver, client->addr << 1); | 1687 | name, 16, chip_ver, client->addr << 1); |
1697 | 1688 | ||
1698 | return V4L2_IDENT_GM7113C; | 1689 | return GM7113C; |
1699 | } | 1690 | } |
1700 | 1691 | ||
1701 | /* Chip was not discovered. Return its ID and don't bind */ | 1692 | /* Chip was not discovered. Return its ID and don't bind */ |
@@ -1774,19 +1765,19 @@ static int saa711x_probe(struct i2c_client *client, | |||
1774 | /* init to 60hz/48khz */ | 1765 | /* init to 60hz/48khz */ |
1775 | state->crystal_freq = SAA7115_FREQ_24_576_MHZ; | 1766 | state->crystal_freq = SAA7115_FREQ_24_576_MHZ; |
1776 | switch (state->ident) { | 1767 | switch (state->ident) { |
1777 | case V4L2_IDENT_SAA7111: | 1768 | case SAA7111: |
1778 | case V4L2_IDENT_SAA7111A: | 1769 | case SAA7111A: |
1779 | saa711x_writeregs(sd, saa7111_init); | 1770 | saa711x_writeregs(sd, saa7111_init); |
1780 | break; | 1771 | break; |
1781 | case V4L2_IDENT_GM7113C: | 1772 | case GM7113C: |
1782 | case V4L2_IDENT_SAA7113: | 1773 | case SAA7113: |
1783 | saa711x_writeregs(sd, saa7113_init); | 1774 | saa711x_writeregs(sd, saa7113_init); |
1784 | break; | 1775 | break; |
1785 | default: | 1776 | default: |
1786 | state->crystal_freq = SAA7115_FREQ_32_11_MHZ; | 1777 | state->crystal_freq = SAA7115_FREQ_32_11_MHZ; |
1787 | saa711x_writeregs(sd, saa7115_init_auto_input); | 1778 | saa711x_writeregs(sd, saa7115_init_auto_input); |
1788 | } | 1779 | } |
1789 | if (state->ident > V4L2_IDENT_SAA7111A) | 1780 | if (state->ident > SAA7111A) |
1790 | saa711x_writeregs(sd, saa7115_init_misc); | 1781 | saa711x_writeregs(sd, saa7115_init_misc); |
1791 | saa711x_set_v4lstd(sd, V4L2_STD_NTSC); | 1782 | saa711x_set_v4lstd(sd, V4L2_STD_NTSC); |
1792 | v4l2_ctrl_handler_setup(hdl); | 1783 | v4l2_ctrl_handler_setup(hdl); |