mfd: wm8350-i2c: Make sure the i2c regmap functions are compiled
[linux/fpc-iii.git] / drivers / media / i2c / ad9389b.c
blobb06a7e54ee0d25100f1f01abcac7ddc70e8489df
1 /*
2 * Analog Devices AD9389B/AD9889B video encoder driver
4 * Copyright 2012 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
6 * This program is free software; you may redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
10 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
11 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
13 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
14 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
15 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
16 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17 * SOFTWARE.
21 * References (c = chapter, p = page):
22 * REF_01 - Analog Devices, Programming Guide, AD9889B/AD9389B,
23 * HDMI Transitter, Rev. A, October 2010
26 #include <linux/kernel.h>
27 #include <linux/module.h>
28 #include <linux/slab.h>
29 #include <linux/i2c.h>
30 #include <linux/delay.h>
31 #include <linux/videodev2.h>
32 #include <linux/workqueue.h>
33 #include <linux/v4l2-dv-timings.h>
34 #include <media/v4l2-device.h>
35 #include <media/v4l2-common.h>
36 #include <media/v4l2-dv-timings.h>
37 #include <media/v4l2-ctrls.h>
38 #include <media/ad9389b.h>
40 static int debug;
41 module_param(debug, int, 0644);
42 MODULE_PARM_DESC(debug, "debug level (0-2)");
44 MODULE_DESCRIPTION("Analog Devices AD9389B/AD9889B video encoder driver");
45 MODULE_AUTHOR("Hans Verkuil <hans.verkuil@cisco.com>");
46 MODULE_AUTHOR("Martin Bugge <marbugge@cisco.com>");
47 MODULE_LICENSE("GPL");
49 #define MASK_AD9389B_EDID_RDY_INT 0x04
50 #define MASK_AD9389B_MSEN_INT 0x40
51 #define MASK_AD9389B_HPD_INT 0x80
53 #define MASK_AD9389B_HPD_DETECT 0x40
54 #define MASK_AD9389B_MSEN_DETECT 0x20
55 #define MASK_AD9389B_EDID_RDY 0x10
57 #define EDID_MAX_RETRIES (8)
58 #define EDID_DELAY 250
59 #define EDID_MAX_SEGM 8
62 **********************************************************************
64 * Arrays with configuration parameters for the AD9389B
66 **********************************************************************
69 struct i2c_reg_value {
70 u8 reg;
71 u8 value;
74 struct ad9389b_state_edid {
75 /* total number of blocks */
76 u32 blocks;
77 /* Number of segments read */
78 u32 segments;
79 u8 data[EDID_MAX_SEGM * 256];
80 /* Number of EDID read retries left */
81 unsigned read_retries;
84 struct ad9389b_state {
85 struct ad9389b_platform_data pdata;
86 struct v4l2_subdev sd;
87 struct media_pad pad;
88 struct v4l2_ctrl_handler hdl;
89 int chip_revision;
90 /* Is the ad9389b powered on? */
91 bool power_on;
92 /* Did we receive hotplug and rx-sense signals? */
93 bool have_monitor;
94 /* timings from s_dv_timings */
95 struct v4l2_dv_timings dv_timings;
96 /* controls */
97 struct v4l2_ctrl *hdmi_mode_ctrl;
98 struct v4l2_ctrl *hotplug_ctrl;
99 struct v4l2_ctrl *rx_sense_ctrl;
100 struct v4l2_ctrl *have_edid0_ctrl;
101 struct v4l2_ctrl *rgb_quantization_range_ctrl;
102 struct i2c_client *edid_i2c_client;
103 struct ad9389b_state_edid edid;
104 /* Running counter of the number of detected EDIDs (for debugging) */
105 unsigned edid_detect_counter;
106 struct workqueue_struct *work_queue;
107 struct delayed_work edid_handler; /* work entry */
110 static void ad9389b_check_monitor_present_status(struct v4l2_subdev *sd);
111 static bool ad9389b_check_edid_status(struct v4l2_subdev *sd);
112 static void ad9389b_setup(struct v4l2_subdev *sd);
113 static int ad9389b_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq);
114 static int ad9389b_s_clock_freq(struct v4l2_subdev *sd, u32 freq);
116 static inline struct ad9389b_state *get_ad9389b_state(struct v4l2_subdev *sd)
118 return container_of(sd, struct ad9389b_state, sd);
121 static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl)
123 return &container_of(ctrl->handler, struct ad9389b_state, hdl)->sd;
126 /* ------------------------ I2C ----------------------------------------------- */
128 static int ad9389b_rd(struct v4l2_subdev *sd, u8 reg)
130 struct i2c_client *client = v4l2_get_subdevdata(sd);
132 return i2c_smbus_read_byte_data(client, reg);
135 static int ad9389b_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
137 struct i2c_client *client = v4l2_get_subdevdata(sd);
138 int ret;
139 int i;
141 for (i = 0; i < 3; i++) {
142 ret = i2c_smbus_write_byte_data(client, reg, val);
143 if (ret == 0)
144 return 0;
146 v4l2_err(sd, "I2C Write Problem\n");
147 return ret;
150 /* To set specific bits in the register, a clear-mask is given (to be AND-ed),
151 and then the value-mask (to be OR-ed). */
152 static inline void ad9389b_wr_and_or(struct v4l2_subdev *sd, u8 reg,
153 u8 clr_mask, u8 val_mask)
155 ad9389b_wr(sd, reg, (ad9389b_rd(sd, reg) & clr_mask) | val_mask);
158 static void ad9389b_edid_rd(struct v4l2_subdev *sd, u16 len, u8 *buf)
160 struct ad9389b_state *state = get_ad9389b_state(sd);
161 int i;
163 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
165 for (i = 0; i < len; i++)
166 buf[i] = i2c_smbus_read_byte_data(state->edid_i2c_client, i);
169 static inline bool ad9389b_have_hotplug(struct v4l2_subdev *sd)
171 return ad9389b_rd(sd, 0x42) & MASK_AD9389B_HPD_DETECT;
174 static inline bool ad9389b_have_rx_sense(struct v4l2_subdev *sd)
176 return ad9389b_rd(sd, 0x42) & MASK_AD9389B_MSEN_DETECT;
179 static void ad9389b_csc_conversion_mode(struct v4l2_subdev *sd, u8 mode)
181 ad9389b_wr_and_or(sd, 0x17, 0xe7, (mode & 0x3)<<3);
182 ad9389b_wr_and_or(sd, 0x18, 0x9f, (mode & 0x3)<<5);
185 static void ad9389b_csc_coeff(struct v4l2_subdev *sd,
186 u16 A1, u16 A2, u16 A3, u16 A4,
187 u16 B1, u16 B2, u16 B3, u16 B4,
188 u16 C1, u16 C2, u16 C3, u16 C4)
190 /* A */
191 ad9389b_wr_and_or(sd, 0x18, 0xe0, A1>>8);
192 ad9389b_wr(sd, 0x19, A1);
193 ad9389b_wr_and_or(sd, 0x1A, 0xe0, A2>>8);
194 ad9389b_wr(sd, 0x1B, A2);
195 ad9389b_wr_and_or(sd, 0x1c, 0xe0, A3>>8);
196 ad9389b_wr(sd, 0x1d, A3);
197 ad9389b_wr_and_or(sd, 0x1e, 0xe0, A4>>8);
198 ad9389b_wr(sd, 0x1f, A4);
200 /* B */
201 ad9389b_wr_and_or(sd, 0x20, 0xe0, B1>>8);
202 ad9389b_wr(sd, 0x21, B1);
203 ad9389b_wr_and_or(sd, 0x22, 0xe0, B2>>8);
204 ad9389b_wr(sd, 0x23, B2);
205 ad9389b_wr_and_or(sd, 0x24, 0xe0, B3>>8);
206 ad9389b_wr(sd, 0x25, B3);
207 ad9389b_wr_and_or(sd, 0x26, 0xe0, B4>>8);
208 ad9389b_wr(sd, 0x27, B4);
210 /* C */
211 ad9389b_wr_and_or(sd, 0x28, 0xe0, C1>>8);
212 ad9389b_wr(sd, 0x29, C1);
213 ad9389b_wr_and_or(sd, 0x2A, 0xe0, C2>>8);
214 ad9389b_wr(sd, 0x2B, C2);
215 ad9389b_wr_and_or(sd, 0x2C, 0xe0, C3>>8);
216 ad9389b_wr(sd, 0x2D, C3);
217 ad9389b_wr_and_or(sd, 0x2E, 0xe0, C4>>8);
218 ad9389b_wr(sd, 0x2F, C4);
221 static void ad9389b_csc_rgb_full2limit(struct v4l2_subdev *sd, bool enable)
223 if (enable) {
224 u8 csc_mode = 0;
226 ad9389b_csc_conversion_mode(sd, csc_mode);
227 ad9389b_csc_coeff(sd,
228 4096-564, 0, 0, 256,
229 0, 4096-564, 0, 256,
230 0, 0, 4096-564, 256);
231 /* enable CSC */
232 ad9389b_wr_and_or(sd, 0x3b, 0xfe, 0x1);
233 /* AVI infoframe: Limited range RGB (16-235) */
234 ad9389b_wr_and_or(sd, 0xcd, 0xf9, 0x02);
235 } else {
236 /* disable CSC */
237 ad9389b_wr_and_or(sd, 0x3b, 0xfe, 0x0);
238 /* AVI infoframe: Full range RGB (0-255) */
239 ad9389b_wr_and_or(sd, 0xcd, 0xf9, 0x04);
243 static void ad9389b_set_IT_content_AVI_InfoFrame(struct v4l2_subdev *sd)
245 struct ad9389b_state *state = get_ad9389b_state(sd);
247 if (state->dv_timings.bt.standards & V4L2_DV_BT_STD_CEA861) {
248 /* CEA format, not IT */
249 ad9389b_wr_and_or(sd, 0xcd, 0xbf, 0x00);
250 } else {
251 /* IT format */
252 ad9389b_wr_and_or(sd, 0xcd, 0xbf, 0x40);
256 static int ad9389b_set_rgb_quantization_mode(struct v4l2_subdev *sd, struct v4l2_ctrl *ctrl)
258 struct ad9389b_state *state = get_ad9389b_state(sd);
260 switch (ctrl->val) {
261 case V4L2_DV_RGB_RANGE_AUTO:
262 /* automatic */
263 if (state->dv_timings.bt.standards & V4L2_DV_BT_STD_CEA861) {
264 /* cea format, RGB limited range (16-235) */
265 ad9389b_csc_rgb_full2limit(sd, true);
266 } else {
267 /* not cea format, RGB full range (0-255) */
268 ad9389b_csc_rgb_full2limit(sd, false);
270 break;
271 case V4L2_DV_RGB_RANGE_LIMITED:
272 /* RGB limited range (16-235) */
273 ad9389b_csc_rgb_full2limit(sd, true);
274 break;
275 case V4L2_DV_RGB_RANGE_FULL:
276 /* RGB full range (0-255) */
277 ad9389b_csc_rgb_full2limit(sd, false);
278 break;
279 default:
280 return -EINVAL;
282 return 0;
285 static void ad9389b_set_manual_pll_gear(struct v4l2_subdev *sd, u32 pixelclock)
287 u8 gear;
289 /* Workaround for TMDS PLL problem
290 * The TMDS PLL in AD9389b change gear when the chip is heated above a
291 * certain temperature. The output is disabled when the PLL change gear
292 * so the monitor has to lock on the signal again. A workaround for
293 * this is to use the manual PLL gears. This is a solution from Analog
294 * Devices that is not documented in the datasheets.
295 * 0x98 [7] = enable manual gearing. 0x98 [6:4] = gear
297 * The pixel frequency ranges are based on readout of the gear the
298 * automatic gearing selects for different pixel clocks
299 * (read from 0x9e [3:1]).
302 if (pixelclock > 140000000)
303 gear = 0xc0; /* 4th gear */
304 else if (pixelclock > 117000000)
305 gear = 0xb0; /* 3rd gear */
306 else if (pixelclock > 87000000)
307 gear = 0xa0; /* 2nd gear */
308 else if (pixelclock > 60000000)
309 gear = 0x90; /* 1st gear */
310 else
311 gear = 0x80; /* 0th gear */
313 ad9389b_wr_and_or(sd, 0x98, 0x0f, gear);
316 /* ------------------------------ CTRL OPS ------------------------------ */
318 static int ad9389b_s_ctrl(struct v4l2_ctrl *ctrl)
320 struct v4l2_subdev *sd = to_sd(ctrl);
321 struct ad9389b_state *state = get_ad9389b_state(sd);
323 v4l2_dbg(1, debug, sd,
324 "%s: ctrl id: %d, ctrl->val %d\n", __func__, ctrl->id, ctrl->val);
326 if (state->hdmi_mode_ctrl == ctrl) {
327 /* Set HDMI or DVI-D */
328 ad9389b_wr_and_or(sd, 0xaf, 0xfd,
329 ctrl->val == V4L2_DV_TX_MODE_HDMI ? 0x02 : 0x00);
330 return 0;
332 if (state->rgb_quantization_range_ctrl == ctrl)
333 return ad9389b_set_rgb_quantization_mode(sd, ctrl);
334 return -EINVAL;
337 static const struct v4l2_ctrl_ops ad9389b_ctrl_ops = {
338 .s_ctrl = ad9389b_s_ctrl,
341 /* ---------------------------- CORE OPS ------------------------------------------- */
343 #ifdef CONFIG_VIDEO_ADV_DEBUG
344 static int ad9389b_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
346 reg->val = ad9389b_rd(sd, reg->reg & 0xff);
347 reg->size = 1;
348 return 0;
351 static int ad9389b_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
353 ad9389b_wr(sd, reg->reg & 0xff, reg->val & 0xff);
354 return 0;
356 #endif
358 static int ad9389b_log_status(struct v4l2_subdev *sd)
360 struct ad9389b_state *state = get_ad9389b_state(sd);
361 struct ad9389b_state_edid *edid = &state->edid;
363 static const char * const states[] = {
364 "in reset",
365 "reading EDID",
366 "idle",
367 "initializing HDCP",
368 "HDCP enabled",
369 "initializing HDCP repeater",
370 "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"
372 static const char * const errors[] = {
373 "no error",
374 "bad receiver BKSV",
375 "Ri mismatch",
376 "Pj mismatch",
377 "i2c error",
378 "timed out",
379 "max repeater cascade exceeded",
380 "hash check failed",
381 "too many devices",
382 "9", "A", "B", "C", "D", "E", "F"
385 u8 manual_gear;
387 v4l2_info(sd, "chip revision %d\n", state->chip_revision);
388 v4l2_info(sd, "power %s\n", state->power_on ? "on" : "off");
389 v4l2_info(sd, "%s hotplug, %s Rx Sense, %s EDID (%d block(s))\n",
390 (ad9389b_rd(sd, 0x42) & MASK_AD9389B_HPD_DETECT) ?
391 "detected" : "no",
392 (ad9389b_rd(sd, 0x42) & MASK_AD9389B_MSEN_DETECT) ?
393 "detected" : "no",
394 edid->segments ? "found" : "no", edid->blocks);
395 if (state->have_monitor) {
396 v4l2_info(sd, "%s output %s\n",
397 (ad9389b_rd(sd, 0xaf) & 0x02) ?
398 "HDMI" : "DVI-D",
399 (ad9389b_rd(sd, 0xa1) & 0x3c) ?
400 "disabled" : "enabled");
402 v4l2_info(sd, "ad9389b: %s\n", (ad9389b_rd(sd, 0xb8) & 0x40) ?
403 "encrypted" : "no encryption");
404 v4l2_info(sd, "state: %s, error: %s, detect count: %u, msk/irq: %02x/%02x\n",
405 states[ad9389b_rd(sd, 0xc8) & 0xf],
406 errors[ad9389b_rd(sd, 0xc8) >> 4],
407 state->edid_detect_counter,
408 ad9389b_rd(sd, 0x94), ad9389b_rd(sd, 0x96));
409 manual_gear = ad9389b_rd(sd, 0x98) & 0x80;
410 v4l2_info(sd, "ad9389b: RGB quantization: %s range\n",
411 ad9389b_rd(sd, 0x3b) & 0x01 ? "limited" : "full");
412 v4l2_info(sd, "ad9389b: %s gear %d\n",
413 manual_gear ? "manual" : "automatic",
414 manual_gear ? ((ad9389b_rd(sd, 0x98) & 0x70) >> 4) :
415 ((ad9389b_rd(sd, 0x9e) & 0x0e) >> 1));
416 if (state->have_monitor) {
417 if (ad9389b_rd(sd, 0xaf) & 0x02) {
418 /* HDMI only */
419 u8 manual_cts = ad9389b_rd(sd, 0x0a) & 0x80;
420 u32 N = (ad9389b_rd(sd, 0x01) & 0xf) << 16 |
421 ad9389b_rd(sd, 0x02) << 8 |
422 ad9389b_rd(sd, 0x03);
423 u8 vic_detect = ad9389b_rd(sd, 0x3e) >> 2;
424 u8 vic_sent = ad9389b_rd(sd, 0x3d) & 0x3f;
425 u32 CTS;
427 if (manual_cts)
428 CTS = (ad9389b_rd(sd, 0x07) & 0xf) << 16 |
429 ad9389b_rd(sd, 0x08) << 8 |
430 ad9389b_rd(sd, 0x09);
431 else
432 CTS = (ad9389b_rd(sd, 0x04) & 0xf) << 16 |
433 ad9389b_rd(sd, 0x05) << 8 |
434 ad9389b_rd(sd, 0x06);
435 N = (ad9389b_rd(sd, 0x01) & 0xf) << 16 |
436 ad9389b_rd(sd, 0x02) << 8 |
437 ad9389b_rd(sd, 0x03);
439 v4l2_info(sd, "ad9389b: CTS %s mode: N %d, CTS %d\n",
440 manual_cts ? "manual" : "automatic", N, CTS);
442 v4l2_info(sd, "ad9389b: VIC: detected %d, sent %d\n",
443 vic_detect, vic_sent);
446 if (state->dv_timings.type == V4L2_DV_BT_656_1120)
447 v4l2_print_dv_timings(sd->name, "timings: ",
448 &state->dv_timings, false);
449 else
450 v4l2_info(sd, "no timings set\n");
451 return 0;
454 /* Power up/down ad9389b */
455 static int ad9389b_s_power(struct v4l2_subdev *sd, int on)
457 struct ad9389b_state *state = get_ad9389b_state(sd);
458 struct ad9389b_platform_data *pdata = &state->pdata;
459 const int retries = 20;
460 int i;
462 v4l2_dbg(1, debug, sd, "%s: power %s\n", __func__, on ? "on" : "off");
464 state->power_on = on;
466 if (!on) {
467 /* Power down */
468 ad9389b_wr_and_or(sd, 0x41, 0xbf, 0x40);
469 return true;
472 /* Power up */
473 /* The ad9389b does not always come up immediately.
474 Retry multiple times. */
475 for (i = 0; i < retries; i++) {
476 ad9389b_wr_and_or(sd, 0x41, 0xbf, 0x0);
477 if ((ad9389b_rd(sd, 0x41) & 0x40) == 0)
478 break;
479 ad9389b_wr_and_or(sd, 0x41, 0xbf, 0x40);
480 msleep(10);
482 if (i == retries) {
483 v4l2_dbg(1, debug, sd, "failed to powerup the ad9389b\n");
484 ad9389b_s_power(sd, 0);
485 return false;
487 if (i > 1)
488 v4l2_dbg(1, debug, sd,
489 "needed %d retries to powerup the ad9389b\n", i);
491 /* Select chip: AD9389B */
492 ad9389b_wr_and_or(sd, 0xba, 0xef, 0x10);
494 /* Reserved registers that must be set according to REF_01 p. 11*/
495 ad9389b_wr_and_or(sd, 0x98, 0xf0, 0x07);
496 ad9389b_wr(sd, 0x9c, 0x38);
497 ad9389b_wr_and_or(sd, 0x9d, 0xfc, 0x01);
499 /* Differential output drive strength */
500 if (pdata->diff_data_drive_strength > 0)
501 ad9389b_wr(sd, 0xa2, pdata->diff_data_drive_strength);
502 else
503 ad9389b_wr(sd, 0xa2, 0x87);
505 if (pdata->diff_clk_drive_strength > 0)
506 ad9389b_wr(sd, 0xa3, pdata->diff_clk_drive_strength);
507 else
508 ad9389b_wr(sd, 0xa3, 0x87);
510 ad9389b_wr(sd, 0x0a, 0x01);
511 ad9389b_wr(sd, 0xbb, 0xff);
513 /* Set number of attempts to read the EDID */
514 ad9389b_wr(sd, 0xc9, 0xf);
515 return true;
518 /* Enable interrupts */
519 static void ad9389b_set_isr(struct v4l2_subdev *sd, bool enable)
521 u8 irqs = MASK_AD9389B_HPD_INT | MASK_AD9389B_MSEN_INT;
522 u8 irqs_rd;
523 int retries = 100;
525 /* The datasheet says that the EDID ready interrupt should be
526 disabled if there is no hotplug. */
527 if (!enable)
528 irqs = 0;
529 else if (ad9389b_have_hotplug(sd))
530 irqs |= MASK_AD9389B_EDID_RDY_INT;
533 * This i2c write can fail (approx. 1 in 1000 writes). But it
534 * is essential that this register is correct, so retry it
535 * multiple times.
537 * Note that the i2c write does not report an error, but the readback
538 * clearly shows the wrong value.
540 do {
541 ad9389b_wr(sd, 0x94, irqs);
542 irqs_rd = ad9389b_rd(sd, 0x94);
543 } while (retries-- && irqs_rd != irqs);
545 if (irqs_rd != irqs)
546 v4l2_err(sd, "Could not set interrupts: hw failure?\n");
549 /* Interrupt handler */
550 static int ad9389b_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
552 u8 irq_status;
554 /* disable interrupts to prevent a race condition */
555 ad9389b_set_isr(sd, false);
556 irq_status = ad9389b_rd(sd, 0x96);
557 /* clear detected interrupts */
558 ad9389b_wr(sd, 0x96, irq_status);
560 if (irq_status & (MASK_AD9389B_HPD_INT | MASK_AD9389B_MSEN_INT))
561 ad9389b_check_monitor_present_status(sd);
562 if (irq_status & MASK_AD9389B_EDID_RDY_INT)
563 ad9389b_check_edid_status(sd);
565 /* enable interrupts */
566 ad9389b_set_isr(sd, true);
567 *handled = true;
568 return 0;
571 static const struct v4l2_subdev_core_ops ad9389b_core_ops = {
572 .log_status = ad9389b_log_status,
573 #ifdef CONFIG_VIDEO_ADV_DEBUG
574 .g_register = ad9389b_g_register,
575 .s_register = ad9389b_s_register,
576 #endif
577 .s_power = ad9389b_s_power,
578 .interrupt_service_routine = ad9389b_isr,
581 /* ------------------------------ PAD OPS ------------------------------ */
583 static int ad9389b_get_edid(struct v4l2_subdev *sd, struct v4l2_subdev_edid *edid)
585 struct ad9389b_state *state = get_ad9389b_state(sd);
587 if (edid->pad != 0)
588 return -EINVAL;
589 if (edid->blocks == 0 || edid->blocks > 256)
590 return -EINVAL;
591 if (!edid->edid)
592 return -EINVAL;
593 if (!state->edid.segments) {
594 v4l2_dbg(1, debug, sd, "EDID segment 0 not found\n");
595 return -ENODATA;
597 if (edid->start_block >= state->edid.segments * 2)
598 return -E2BIG;
599 if (edid->blocks + edid->start_block >= state->edid.segments * 2)
600 edid->blocks = state->edid.segments * 2 - edid->start_block;
601 memcpy(edid->edid, &state->edid.data[edid->start_block * 128],
602 128 * edid->blocks);
603 return 0;
606 static const struct v4l2_subdev_pad_ops ad9389b_pad_ops = {
607 .get_edid = ad9389b_get_edid,
610 /* ------------------------------ VIDEO OPS ------------------------------ */
612 /* Enable/disable ad9389b output */
613 static int ad9389b_s_stream(struct v4l2_subdev *sd, int enable)
615 struct ad9389b_state *state = get_ad9389b_state(sd);
617 v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
619 ad9389b_wr_and_or(sd, 0xa1, ~0x3c, (enable ? 0 : 0x3c));
620 if (enable) {
621 ad9389b_check_monitor_present_status(sd);
622 } else {
623 ad9389b_s_power(sd, 0);
624 state->have_monitor = false;
626 return 0;
629 static const struct v4l2_dv_timings_cap ad9389b_timings_cap = {
630 .type = V4L2_DV_BT_656_1120,
631 /* keep this initialization for compatibility with GCC < 4.4.6 */
632 .reserved = { 0 },
633 V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000,
634 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
635 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
636 V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
637 V4L2_DV_BT_CAP_CUSTOM)
640 static int ad9389b_s_dv_timings(struct v4l2_subdev *sd,
641 struct v4l2_dv_timings *timings)
643 struct ad9389b_state *state = get_ad9389b_state(sd);
645 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
647 /* quick sanity check */
648 if (!v4l2_valid_dv_timings(timings, &ad9389b_timings_cap, NULL, NULL))
649 return -EINVAL;
651 /* Fill the optional fields .standards and .flags in struct v4l2_dv_timings
652 if the format is one of the CEA or DMT timings. */
653 v4l2_find_dv_timings_cap(timings, &ad9389b_timings_cap, 0, NULL, NULL);
655 timings->bt.flags &= ~V4L2_DV_FL_REDUCED_FPS;
657 /* save timings */
658 state->dv_timings = *timings;
660 /* update quantization range based on new dv_timings */
661 ad9389b_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
663 /* update PLL gear based on new dv_timings */
664 if (state->pdata.tmds_pll_gear == AD9389B_TMDS_PLL_GEAR_SEMI_AUTOMATIC)
665 ad9389b_set_manual_pll_gear(sd, (u32)timings->bt.pixelclock);
667 /* update AVI infoframe */
668 ad9389b_set_IT_content_AVI_InfoFrame(sd);
670 return 0;
673 static int ad9389b_g_dv_timings(struct v4l2_subdev *sd,
674 struct v4l2_dv_timings *timings)
676 struct ad9389b_state *state = get_ad9389b_state(sd);
678 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
680 if (!timings)
681 return -EINVAL;
683 *timings = state->dv_timings;
685 return 0;
688 static int ad9389b_enum_dv_timings(struct v4l2_subdev *sd,
689 struct v4l2_enum_dv_timings *timings)
691 return v4l2_enum_dv_timings_cap(timings, &ad9389b_timings_cap,
692 NULL, NULL);
695 static int ad9389b_dv_timings_cap(struct v4l2_subdev *sd,
696 struct v4l2_dv_timings_cap *cap)
698 *cap = ad9389b_timings_cap;
699 return 0;
702 static const struct v4l2_subdev_video_ops ad9389b_video_ops = {
703 .s_stream = ad9389b_s_stream,
704 .s_dv_timings = ad9389b_s_dv_timings,
705 .g_dv_timings = ad9389b_g_dv_timings,
706 .enum_dv_timings = ad9389b_enum_dv_timings,
707 .dv_timings_cap = ad9389b_dv_timings_cap,
710 static int ad9389b_s_audio_stream(struct v4l2_subdev *sd, int enable)
712 v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
714 if (enable)
715 ad9389b_wr_and_or(sd, 0x45, 0x3f, 0x80);
716 else
717 ad9389b_wr_and_or(sd, 0x45, 0x3f, 0x40);
719 return 0;
722 static int ad9389b_s_clock_freq(struct v4l2_subdev *sd, u32 freq)
724 u32 N;
726 switch (freq) {
727 case 32000: N = 4096; break;
728 case 44100: N = 6272; break;
729 case 48000: N = 6144; break;
730 case 88200: N = 12544; break;
731 case 96000: N = 12288; break;
732 case 176400: N = 25088; break;
733 case 192000: N = 24576; break;
734 default:
735 return -EINVAL;
738 /* Set N (used with CTS to regenerate the audio clock) */
739 ad9389b_wr(sd, 0x01, (N >> 16) & 0xf);
740 ad9389b_wr(sd, 0x02, (N >> 8) & 0xff);
741 ad9389b_wr(sd, 0x03, N & 0xff);
743 return 0;
746 static int ad9389b_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq)
748 u32 i2s_sf;
750 switch (freq) {
751 case 32000: i2s_sf = 0x30; break;
752 case 44100: i2s_sf = 0x00; break;
753 case 48000: i2s_sf = 0x20; break;
754 case 88200: i2s_sf = 0x80; break;
755 case 96000: i2s_sf = 0xa0; break;
756 case 176400: i2s_sf = 0xc0; break;
757 case 192000: i2s_sf = 0xe0; break;
758 default:
759 return -EINVAL;
762 /* Set sampling frequency for I2S audio to 48 kHz */
763 ad9389b_wr_and_or(sd, 0x15, 0xf, i2s_sf);
765 return 0;
768 static int ad9389b_s_routing(struct v4l2_subdev *sd, u32 input, u32 output, u32 config)
770 /* TODO based on input/output/config */
771 /* TODO See datasheet "Programmers guide" p. 39-40 */
773 /* Only 2 channels in use for application */
774 ad9389b_wr_and_or(sd, 0x50, 0x1f, 0x20);
775 /* Speaker mapping */
776 ad9389b_wr(sd, 0x51, 0x00);
778 /* TODO Where should this be placed? */
779 /* 16 bit audio word length */
780 ad9389b_wr_and_or(sd, 0x14, 0xf0, 0x02);
782 return 0;
785 static const struct v4l2_subdev_audio_ops ad9389b_audio_ops = {
786 .s_stream = ad9389b_s_audio_stream,
787 .s_clock_freq = ad9389b_s_clock_freq,
788 .s_i2s_clock_freq = ad9389b_s_i2s_clock_freq,
789 .s_routing = ad9389b_s_routing,
792 /* --------------------- SUBDEV OPS --------------------------------------- */
794 static const struct v4l2_subdev_ops ad9389b_ops = {
795 .core = &ad9389b_core_ops,
796 .video = &ad9389b_video_ops,
797 .audio = &ad9389b_audio_ops,
798 .pad = &ad9389b_pad_ops,
801 /* ----------------------------------------------------------------------- */
802 static void ad9389b_dbg_dump_edid(int lvl, int debug, struct v4l2_subdev *sd,
803 int segment, u8 *buf)
805 int i, j;
807 if (debug < lvl)
808 return;
810 v4l2_dbg(lvl, debug, sd, "edid segment %d\n", segment);
811 for (i = 0; i < 256; i += 16) {
812 u8 b[128];
813 u8 *bp = b;
815 if (i == 128)
816 v4l2_dbg(lvl, debug, sd, "\n");
817 for (j = i; j < i + 16; j++) {
818 sprintf(bp, "0x%02x, ", buf[j]);
819 bp += 6;
821 bp[0] = '\0';
822 v4l2_dbg(lvl, debug, sd, "%s\n", b);
826 static void ad9389b_edid_handler(struct work_struct *work)
828 struct delayed_work *dwork = to_delayed_work(work);
829 struct ad9389b_state *state = container_of(dwork,
830 struct ad9389b_state, edid_handler);
831 struct v4l2_subdev *sd = &state->sd;
832 struct ad9389b_edid_detect ed;
834 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
836 if (ad9389b_check_edid_status(sd)) {
837 /* Return if we received the EDID. */
838 return;
841 if (ad9389b_have_hotplug(sd)) {
842 /* We must retry reading the EDID several times, it is possible
843 * that initially the EDID couldn't be read due to i2c errors
844 * (DVI connectors are particularly prone to this problem). */
845 if (state->edid.read_retries) {
846 state->edid.read_retries--;
847 v4l2_dbg(1, debug, sd, "%s: edid read failed\n", __func__);
848 state->have_monitor = false;
849 ad9389b_s_power(sd, false);
850 ad9389b_s_power(sd, true);
851 queue_delayed_work(state->work_queue,
852 &state->edid_handler, EDID_DELAY);
853 return;
857 /* We failed to read the EDID, so send an event for this. */
858 ed.present = false;
859 ed.segment = ad9389b_rd(sd, 0xc4);
860 v4l2_subdev_notify(sd, AD9389B_EDID_DETECT, (void *)&ed);
861 v4l2_dbg(1, debug, sd, "%s: no edid found\n", __func__);
864 static void ad9389b_audio_setup(struct v4l2_subdev *sd)
866 v4l2_dbg(1, debug, sd, "%s\n", __func__);
868 ad9389b_s_i2s_clock_freq(sd, 48000);
869 ad9389b_s_clock_freq(sd, 48000);
870 ad9389b_s_routing(sd, 0, 0, 0);
873 /* Initial setup of AD9389b */
875 /* Configure hdmi transmitter. */
876 static void ad9389b_setup(struct v4l2_subdev *sd)
878 struct ad9389b_state *state = get_ad9389b_state(sd);
880 v4l2_dbg(1, debug, sd, "%s\n", __func__);
882 /* Input format: RGB 4:4:4 */
883 ad9389b_wr_and_or(sd, 0x15, 0xf1, 0x0);
884 /* Output format: RGB 4:4:4 */
885 ad9389b_wr_and_or(sd, 0x16, 0x3f, 0x0);
886 /* 1st order interpolation 4:2:2 -> 4:4:4 up conversion,
887 Aspect ratio: 16:9 */
888 ad9389b_wr_and_or(sd, 0x17, 0xf9, 0x06);
889 /* Output format: RGB 4:4:4, Active Format Information is valid. */
890 ad9389b_wr_and_or(sd, 0x45, 0xc7, 0x08);
891 /* Underscanned */
892 ad9389b_wr_and_or(sd, 0x46, 0x3f, 0x80);
893 /* Setup video format */
894 ad9389b_wr(sd, 0x3c, 0x0);
895 /* Active format aspect ratio: same as picure. */
896 ad9389b_wr(sd, 0x47, 0x80);
897 /* No encryption */
898 ad9389b_wr_and_or(sd, 0xaf, 0xef, 0x0);
899 /* Positive clk edge capture for input video clock */
900 ad9389b_wr_and_or(sd, 0xba, 0x1f, 0x60);
902 ad9389b_audio_setup(sd);
904 v4l2_ctrl_handler_setup(&state->hdl);
906 ad9389b_set_IT_content_AVI_InfoFrame(sd);
909 static void ad9389b_notify_monitor_detect(struct v4l2_subdev *sd)
911 struct ad9389b_monitor_detect mdt;
912 struct ad9389b_state *state = get_ad9389b_state(sd);
914 mdt.present = state->have_monitor;
915 v4l2_subdev_notify(sd, AD9389B_MONITOR_DETECT, (void *)&mdt);
918 static void ad9389b_check_monitor_present_status(struct v4l2_subdev *sd)
920 struct ad9389b_state *state = get_ad9389b_state(sd);
921 /* read hotplug and rx-sense state */
922 u8 status = ad9389b_rd(sd, 0x42);
924 v4l2_dbg(1, debug, sd, "%s: status: 0x%x%s%s\n",
925 __func__,
926 status,
927 status & MASK_AD9389B_HPD_DETECT ? ", hotplug" : "",
928 status & MASK_AD9389B_MSEN_DETECT ? ", rx-sense" : "");
930 if ((status & MASK_AD9389B_HPD_DETECT) &&
931 ((status & MASK_AD9389B_MSEN_DETECT) || state->edid.segments)) {
932 v4l2_dbg(1, debug, sd,
933 "%s: hotplug and (rx-sense or edid)\n", __func__);
934 if (!state->have_monitor) {
935 v4l2_dbg(1, debug, sd, "%s: monitor detected\n", __func__);
936 state->have_monitor = true;
937 ad9389b_set_isr(sd, true);
938 if (!ad9389b_s_power(sd, true)) {
939 v4l2_dbg(1, debug, sd,
940 "%s: monitor detected, powerup failed\n", __func__);
941 return;
943 ad9389b_setup(sd);
944 ad9389b_notify_monitor_detect(sd);
945 state->edid.read_retries = EDID_MAX_RETRIES;
946 queue_delayed_work(state->work_queue,
947 &state->edid_handler, EDID_DELAY);
949 } else if (status & MASK_AD9389B_HPD_DETECT) {
950 v4l2_dbg(1, debug, sd, "%s: hotplug detected\n", __func__);
951 state->edid.read_retries = EDID_MAX_RETRIES;
952 queue_delayed_work(state->work_queue,
953 &state->edid_handler, EDID_DELAY);
954 } else if (!(status & MASK_AD9389B_HPD_DETECT)) {
955 v4l2_dbg(1, debug, sd, "%s: hotplug not detected\n", __func__);
956 if (state->have_monitor) {
957 v4l2_dbg(1, debug, sd, "%s: monitor not detected\n", __func__);
958 state->have_monitor = false;
959 ad9389b_notify_monitor_detect(sd);
961 ad9389b_s_power(sd, false);
962 memset(&state->edid, 0, sizeof(struct ad9389b_state_edid));
965 /* update read only ctrls */
966 v4l2_ctrl_s_ctrl(state->hotplug_ctrl, ad9389b_have_hotplug(sd) ? 0x1 : 0x0);
967 v4l2_ctrl_s_ctrl(state->rx_sense_ctrl, ad9389b_have_rx_sense(sd) ? 0x1 : 0x0);
968 v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, state->edid.segments ? 0x1 : 0x0);
971 static bool edid_block_verify_crc(u8 *edid_block)
973 u8 sum = 0;
974 int i;
976 for (i = 0; i < 128; i++)
977 sum += edid_block[i];
978 return sum == 0;
981 static bool edid_segment_verify_crc(struct v4l2_subdev *sd, u32 segment)
983 struct ad9389b_state *state = get_ad9389b_state(sd);
984 u32 blocks = state->edid.blocks;
985 u8 *data = state->edid.data;
987 if (edid_block_verify_crc(&data[segment * 256])) {
988 if ((segment + 1) * 2 <= blocks)
989 return edid_block_verify_crc(&data[segment * 256 + 128]);
990 return true;
992 return false;
995 static bool ad9389b_check_edid_status(struct v4l2_subdev *sd)
997 struct ad9389b_state *state = get_ad9389b_state(sd);
998 struct ad9389b_edid_detect ed;
999 int segment;
1000 u8 edidRdy = ad9389b_rd(sd, 0xc5);
1002 v4l2_dbg(1, debug, sd, "%s: edid ready (retries: %d)\n",
1003 __func__, EDID_MAX_RETRIES - state->edid.read_retries);
1005 if (!(edidRdy & MASK_AD9389B_EDID_RDY))
1006 return false;
1008 segment = ad9389b_rd(sd, 0xc4);
1009 if (segment >= EDID_MAX_SEGM) {
1010 v4l2_err(sd, "edid segment number too big\n");
1011 return false;
1013 v4l2_dbg(1, debug, sd, "%s: got segment %d\n", __func__, segment);
1014 ad9389b_edid_rd(sd, 256, &state->edid.data[segment * 256]);
1015 ad9389b_dbg_dump_edid(2, debug, sd, segment,
1016 &state->edid.data[segment * 256]);
1017 if (segment == 0) {
1018 state->edid.blocks = state->edid.data[0x7e] + 1;
1019 v4l2_dbg(1, debug, sd, "%s: %d blocks in total\n",
1020 __func__, state->edid.blocks);
1022 if (!edid_segment_verify_crc(sd, segment)) {
1023 /* edid crc error, force reread of edid segment */
1024 v4l2_err(sd, "%s: edid crc error\n", __func__);
1025 state->have_monitor = false;
1026 ad9389b_s_power(sd, false);
1027 ad9389b_s_power(sd, true);
1028 return false;
1030 /* one more segment read ok */
1031 state->edid.segments = segment + 1;
1032 if (((state->edid.data[0x7e] >> 1) + 1) > state->edid.segments) {
1033 /* Request next EDID segment */
1034 v4l2_dbg(1, debug, sd, "%s: request segment %d\n",
1035 __func__, state->edid.segments);
1036 ad9389b_wr(sd, 0xc9, 0xf);
1037 ad9389b_wr(sd, 0xc4, state->edid.segments);
1038 state->edid.read_retries = EDID_MAX_RETRIES;
1039 queue_delayed_work(state->work_queue,
1040 &state->edid_handler, EDID_DELAY);
1041 return false;
1044 /* report when we have all segments but report only for segment 0 */
1045 ed.present = true;
1046 ed.segment = 0;
1047 v4l2_subdev_notify(sd, AD9389B_EDID_DETECT, (void *)&ed);
1048 state->edid_detect_counter++;
1049 v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, state->edid.segments ? 0x1 : 0x0);
1050 return ed.present;
1053 /* ----------------------------------------------------------------------- */
1055 static void ad9389b_init_setup(struct v4l2_subdev *sd)
1057 struct ad9389b_state *state = get_ad9389b_state(sd);
1058 struct ad9389b_state_edid *edid = &state->edid;
1060 v4l2_dbg(1, debug, sd, "%s\n", __func__);
1062 /* clear all interrupts */
1063 ad9389b_wr(sd, 0x96, 0xff);
1065 memset(edid, 0, sizeof(struct ad9389b_state_edid));
1066 state->have_monitor = false;
1067 ad9389b_set_isr(sd, false);
1070 static int ad9389b_probe(struct i2c_client *client, const struct i2c_device_id *id)
1072 const struct v4l2_dv_timings dv1080p60 = V4L2_DV_BT_CEA_1920X1080P60;
1073 struct ad9389b_state *state;
1074 struct ad9389b_platform_data *pdata = client->dev.platform_data;
1075 struct v4l2_ctrl_handler *hdl;
1076 struct v4l2_subdev *sd;
1077 int err = -EIO;
1079 /* Check if the adapter supports the needed features */
1080 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1081 return -EIO;
1083 v4l_dbg(1, debug, client, "detecting ad9389b client on address 0x%x\n",
1084 client->addr << 1);
1086 state = devm_kzalloc(&client->dev, sizeof(*state), GFP_KERNEL);
1087 if (!state)
1088 return -ENOMEM;
1090 /* Platform data */
1091 if (pdata == NULL) {
1092 v4l_err(client, "No platform data!\n");
1093 return -ENODEV;
1095 memcpy(&state->pdata, pdata, sizeof(state->pdata));
1097 sd = &state->sd;
1098 v4l2_i2c_subdev_init(sd, client, &ad9389b_ops);
1099 sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
1101 hdl = &state->hdl;
1102 v4l2_ctrl_handler_init(hdl, 5);
1104 /* private controls */
1106 state->hdmi_mode_ctrl = v4l2_ctrl_new_std_menu(hdl, &ad9389b_ctrl_ops,
1107 V4L2_CID_DV_TX_MODE, V4L2_DV_TX_MODE_HDMI,
1108 0, V4L2_DV_TX_MODE_DVI_D);
1109 state->hotplug_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1110 V4L2_CID_DV_TX_HOTPLUG, 0, 1, 0, 0);
1111 state->rx_sense_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1112 V4L2_CID_DV_TX_RXSENSE, 0, 1, 0, 0);
1113 state->have_edid0_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1114 V4L2_CID_DV_TX_EDID_PRESENT, 0, 1, 0, 0);
1115 state->rgb_quantization_range_ctrl =
1116 v4l2_ctrl_new_std_menu(hdl, &ad9389b_ctrl_ops,
1117 V4L2_CID_DV_TX_RGB_RANGE, V4L2_DV_RGB_RANGE_FULL,
1118 0, V4L2_DV_RGB_RANGE_AUTO);
1119 sd->ctrl_handler = hdl;
1120 if (hdl->error) {
1121 err = hdl->error;
1123 goto err_hdl;
1125 state->hdmi_mode_ctrl->is_private = true;
1126 state->hotplug_ctrl->is_private = true;
1127 state->rx_sense_ctrl->is_private = true;
1128 state->have_edid0_ctrl->is_private = true;
1129 state->rgb_quantization_range_ctrl->is_private = true;
1131 state->pad.flags = MEDIA_PAD_FL_SINK;
1132 err = media_entity_init(&sd->entity, 1, &state->pad, 0);
1133 if (err)
1134 goto err_hdl;
1136 state->chip_revision = ad9389b_rd(sd, 0x0);
1137 if (state->chip_revision != 2) {
1138 v4l2_err(sd, "chip_revision %d != 2\n", state->chip_revision);
1139 err = -EIO;
1140 goto err_entity;
1142 v4l2_dbg(1, debug, sd, "reg 0x41 0x%x, chip version (reg 0x00) 0x%x\n",
1143 ad9389b_rd(sd, 0x41), state->chip_revision);
1145 state->edid_i2c_client = i2c_new_dummy(client->adapter, (0x7e>>1));
1146 if (state->edid_i2c_client == NULL) {
1147 v4l2_err(sd, "failed to register edid i2c client\n");
1148 err = -ENOMEM;
1149 goto err_entity;
1152 state->work_queue = create_singlethread_workqueue(sd->name);
1153 if (state->work_queue == NULL) {
1154 v4l2_err(sd, "could not create workqueue\n");
1155 err = -ENOMEM;
1156 goto err_unreg;
1159 INIT_DELAYED_WORK(&state->edid_handler, ad9389b_edid_handler);
1160 state->dv_timings = dv1080p60;
1162 ad9389b_init_setup(sd);
1163 ad9389b_set_isr(sd, true);
1165 v4l2_info(sd, "%s found @ 0x%x (%s)\n", client->name,
1166 client->addr << 1, client->adapter->name);
1167 return 0;
1169 err_unreg:
1170 i2c_unregister_device(state->edid_i2c_client);
1171 err_entity:
1172 media_entity_cleanup(&sd->entity);
1173 err_hdl:
1174 v4l2_ctrl_handler_free(&state->hdl);
1175 return err;
1178 /* ----------------------------------------------------------------------- */
1180 static int ad9389b_remove(struct i2c_client *client)
1182 struct v4l2_subdev *sd = i2c_get_clientdata(client);
1183 struct ad9389b_state *state = get_ad9389b_state(sd);
1185 state->chip_revision = -1;
1187 v4l2_dbg(1, debug, sd, "%s removed @ 0x%x (%s)\n", client->name,
1188 client->addr << 1, client->adapter->name);
1190 ad9389b_s_stream(sd, false);
1191 ad9389b_s_audio_stream(sd, false);
1192 ad9389b_init_setup(sd);
1193 cancel_delayed_work(&state->edid_handler);
1194 i2c_unregister_device(state->edid_i2c_client);
1195 destroy_workqueue(state->work_queue);
1196 v4l2_device_unregister_subdev(sd);
1197 media_entity_cleanup(&sd->entity);
1198 v4l2_ctrl_handler_free(sd->ctrl_handler);
1199 return 0;
1202 /* ----------------------------------------------------------------------- */
1204 static struct i2c_device_id ad9389b_id[] = {
1205 { "ad9389b", 0 },
1206 { "ad9889b", 0 },
1209 MODULE_DEVICE_TABLE(i2c, ad9389b_id);
1211 static struct i2c_driver ad9389b_driver = {
1212 .driver = {
1213 .owner = THIS_MODULE,
1214 .name = "ad9389b",
1216 .probe = ad9389b_probe,
1217 .remove = ad9389b_remove,
1218 .id_table = ad9389b_id,
1221 module_i2c_driver(ad9389b_driver);