Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ad9389b.c
Go to the documentation of this file.
1 /*
2  * Analog Devices AD9389B/AD9889B video encoder driver
3  *
4  * Copyright 2012 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
5  *
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.
9  *
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.
18  */
19 
20 /*
21  * References (c = chapter, p = page):
22  * REF_01 - Analog Devices, Programming Guide, AD9889B/AD9389B,
23  * HDMI Transitter, Rev. A, October 2010
24  */
25 
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-chip-ident.h>
36 #include <media/v4l2-common.h>
37 #include <media/v4l2-ctrls.h>
38 #include <media/ad9389b.h>
39 
40 static int debug;
41 module_param(debug, int, 0644);
42 MODULE_PARM_DESC(debug, "debug level (0-2)");
43 
44 MODULE_DESCRIPTION("Analog Devices AD9389B/AD9889B video encoder driver");
45 MODULE_AUTHOR("Hans Verkuil <[email protected]>");
46 MODULE_AUTHOR("Martin Bugge <[email protected]>");
47 MODULE_LICENSE("GPL");
48 
49 #define MASK_AD9389B_EDID_RDY_INT 0x04
50 #define MASK_AD9389B_MSEN_INT 0x40
51 #define MASK_AD9389B_HPD_INT 0x80
52 
53 #define MASK_AD9389B_HPD_DETECT 0x40
54 #define MASK_AD9389B_MSEN_DETECT 0x20
55 #define MASK_AD9389B_EDID_RDY 0x10
56 
57 #define EDID_MAX_RETRIES (8)
58 #define EDID_DELAY 250
59 #define EDID_MAX_SEGM 8
60 
61 /*
62 **********************************************************************
63 *
64 * Arrays with configuration parameters for the AD9389B
65 *
66 **********************************************************************
67 */
68 
69 struct i2c_reg_value {
72 };
73 
75  /* total number of blocks */
77  /* Number of segments read */
80  /* Number of EDID read retries left */
81  unsigned read_retries;
82 };
83 
84 struct ad9389b_state {
86  struct v4l2_subdev sd;
87  struct media_pad pad;
90  /* Is the ad9389b powered on? */
91  bool power_on;
92  /* Did we receive hotplug and rx-sense signals? */
94  /* timings from s_dv_timings */
96  /* controls */
104  /* Running counter of the number of detected EDIDs (for debugging) */
107  struct delayed_work edid_handler; /* work entry */
108 };
109 
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);
115 
116 static inline struct ad9389b_state *get_ad9389b_state(struct v4l2_subdev *sd)
117 {
118  return container_of(sd, struct ad9389b_state, sd);
119 }
120 
121 static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl)
122 {
123  return &container_of(ctrl->handler, struct ad9389b_state, hdl)->sd;
124 }
125 
126 /* ------------------------ I2C ----------------------------------------------- */
127 
128 static int ad9389b_rd(struct v4l2_subdev *sd, u8 reg)
129 {
130  struct i2c_client *client = v4l2_get_subdevdata(sd);
131 
132  return i2c_smbus_read_byte_data(client, reg);
133 }
134 
135 static int ad9389b_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
136 {
137  struct i2c_client *client = v4l2_get_subdevdata(sd);
138  int ret;
139  int i;
140 
141  for (i = 0; i < 3; i++) {
142  ret = i2c_smbus_write_byte_data(client, reg, val);
143  if (ret == 0)
144  return 0;
145  }
146  v4l2_err(sd, "I2C Write Problem\n");
147  return ret;
148 }
149 
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)
154 {
155  ad9389b_wr(sd, reg, (ad9389b_rd(sd, reg) & clr_mask) | val_mask);
156 }
157 
158 static void ad9389b_edid_rd(struct v4l2_subdev *sd, u16 len, u8 *buf)
159 {
160  struct ad9389b_state *state = get_ad9389b_state(sd);
161  int i;
162 
163  v4l2_dbg(1, debug, sd, "%s:\n", __func__);
164 
165  for (i = 0; i < len; i++)
166  buf[i] = i2c_smbus_read_byte_data(state->edid_i2c_client, i);
167 }
168 
169 static inline bool ad9389b_have_hotplug(struct v4l2_subdev *sd)
170 {
171  return ad9389b_rd(sd, 0x42) & MASK_AD9389B_HPD_DETECT;
172 }
173 
174 static inline bool ad9389b_have_rx_sense(struct v4l2_subdev *sd)
175 {
176  return ad9389b_rd(sd, 0x42) & MASK_AD9389B_MSEN_DETECT;
177 }
178 
179 static void ad9389b_csc_conversion_mode(struct v4l2_subdev *sd, u8 mode)
180 {
181  ad9389b_wr_and_or(sd, 0x17, 0xe7, (mode & 0x3)<<3);
182  ad9389b_wr_and_or(sd, 0x18, 0x9f, (mode & 0x3)<<5);
183 }
184 
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)
189 {
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);
199 
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);
209 
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);
219 }
220 
221 static void ad9389b_csc_rgb_full2limit(struct v4l2_subdev *sd, bool enable)
222 {
223  if (enable) {
224  u8 csc_mode = 0;
225 
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);
240  }
241 }
242 
243 static void ad9389b_set_IT_content_AVI_InfoFrame(struct v4l2_subdev *sd)
244 {
245  struct ad9389b_state *state = get_ad9389b_state(sd);
246 
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);
253  }
254 }
255 
256 static int ad9389b_set_rgb_quantization_mode(struct v4l2_subdev *sd, struct v4l2_ctrl *ctrl)
257 {
258  struct ad9389b_state *state = get_ad9389b_state(sd);
259 
260  switch (ctrl->val) {
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);
269  }
270  break;
272  /* RGB limited range (16-235) */
273  ad9389b_csc_rgb_full2limit(sd, true);
274  break;
276  /* RGB full range (0-255) */
277  ad9389b_csc_rgb_full2limit(sd, false);
278  break;
279  default:
280  return -EINVAL;
281  }
282  return 0;
283 }
284 
285 static void ad9389b_set_manual_pll_gear(struct v4l2_subdev *sd, u32 pixelclock)
286 {
287  u8 gear;
288 
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
296  *
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]).
300  */
301 
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 */
312 
313  ad9389b_wr_and_or(sd, 0x98, 0x0f, gear);
314 }
315 
316 /* ------------------------------ CTRL OPS ------------------------------ */
317 
318 static int ad9389b_s_ctrl(struct v4l2_ctrl *ctrl)
319 {
320  struct v4l2_subdev *sd = to_sd(ctrl);
321  struct ad9389b_state *state = get_ad9389b_state(sd);
322 
323  v4l2_dbg(1, debug, sd,
324  "%s: ctrl id: %d, ctrl->val %d\n", __func__, ctrl->id, ctrl->val);
325 
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;
331  }
332  if (state->rgb_quantization_range_ctrl == ctrl)
333  return ad9389b_set_rgb_quantization_mode(sd, ctrl);
334  return -EINVAL;
335 }
336 
337 static const struct v4l2_ctrl_ops ad9389b_ctrl_ops = {
338  .s_ctrl = ad9389b_s_ctrl,
339 };
340 
341 /* ---------------------------- CORE OPS ------------------------------------------- */
342 
343 #ifdef CONFIG_VIDEO_ADV_DEBUG
344 static int ad9389b_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
345 {
346  struct i2c_client *client = v4l2_get_subdevdata(sd);
347 
348  if (!v4l2_chip_match_i2c_client(client, &reg->match))
349  return -EINVAL;
350  if (!capable(CAP_SYS_ADMIN))
351  return -EPERM;
352  reg->val = ad9389b_rd(sd, reg->reg & 0xff);
353  reg->size = 1;
354  return 0;
355 }
356 
357 static int ad9389b_s_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
358 {
359  struct i2c_client *client = v4l2_get_subdevdata(sd);
360 
361  if (!v4l2_chip_match_i2c_client(client, &reg->match))
362  return -EINVAL;
363  if (!capable(CAP_SYS_ADMIN))
364  return -EPERM;
365  ad9389b_wr(sd, reg->reg & 0xff, reg->val & 0xff);
366  return 0;
367 }
368 #endif
369 
370 static int ad9389b_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip)
371 {
372  struct i2c_client *client = v4l2_get_subdevdata(sd);
373 
374  return v4l2_chip_ident_i2c_client(client, chip, V4L2_IDENT_AD9389B, 0);
375 }
376 
377 static int ad9389b_log_status(struct v4l2_subdev *sd)
378 {
379  struct ad9389b_state *state = get_ad9389b_state(sd);
380  struct ad9389b_state_edid *edid = &state->edid;
381 
382  static const char * const states[] = {
383  "in reset",
384  "reading EDID",
385  "idle",
386  "initializing HDCP",
387  "HDCP enabled",
388  "initializing HDCP repeater",
389  "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"
390  };
391  static const char * const errors[] = {
392  "no error",
393  "bad receiver BKSV",
394  "Ri mismatch",
395  "Pj mismatch",
396  "i2c error",
397  "timed out",
398  "max repeater cascade exceeded",
399  "hash check failed",
400  "too many devices",
401  "9", "A", "B", "C", "D", "E", "F"
402  };
403 
404  u8 manual_gear;
405 
406  v4l2_info(sd, "chip revision %d\n", state->chip_revision);
407  v4l2_info(sd, "power %s\n", state->power_on ? "on" : "off");
408  v4l2_info(sd, "%s hotplug, %s Rx Sense, %s EDID (%d block(s))\n",
409  (ad9389b_rd(sd, 0x42) & MASK_AD9389B_HPD_DETECT) ?
410  "detected" : "no",
411  (ad9389b_rd(sd, 0x42) & MASK_AD9389B_MSEN_DETECT) ?
412  "detected" : "no",
413  edid->segments ? "found" : "no", edid->blocks);
414  if (state->have_monitor) {
415  v4l2_info(sd, "%s output %s\n",
416  (ad9389b_rd(sd, 0xaf) & 0x02) ?
417  "HDMI" : "DVI-D",
418  (ad9389b_rd(sd, 0xa1) & 0x3c) ?
419  "disabled" : "enabled");
420  }
421  v4l2_info(sd, "ad9389b: %s\n", (ad9389b_rd(sd, 0xb8) & 0x40) ?
422  "encrypted" : "no encryption");
423  v4l2_info(sd, "state: %s, error: %s, detect count: %u, msk/irq: %02x/%02x\n",
424  states[ad9389b_rd(sd, 0xc8) & 0xf],
425  errors[ad9389b_rd(sd, 0xc8) >> 4],
426  state->edid_detect_counter,
427  ad9389b_rd(sd, 0x94), ad9389b_rd(sd, 0x96));
428  manual_gear = ad9389b_rd(sd, 0x98) & 0x80;
429  v4l2_info(sd, "ad9389b: RGB quantization: %s range\n",
430  ad9389b_rd(sd, 0x3b) & 0x01 ? "limited" : "full");
431  v4l2_info(sd, "ad9389b: %s gear %d\n",
432  manual_gear ? "manual" : "automatic",
433  manual_gear ? ((ad9389b_rd(sd, 0x98) & 0x70) >> 4) :
434  ((ad9389b_rd(sd, 0x9e) & 0x0e) >> 1));
435  if (state->have_monitor) {
436  if (ad9389b_rd(sd, 0xaf) & 0x02) {
437  /* HDMI only */
438  u8 manual_cts = ad9389b_rd(sd, 0x0a) & 0x80;
439  u32 N = (ad9389b_rd(sd, 0x01) & 0xf) << 16 |
440  ad9389b_rd(sd, 0x02) << 8 |
441  ad9389b_rd(sd, 0x03);
442  u8 vic_detect = ad9389b_rd(sd, 0x3e) >> 2;
443  u8 vic_sent = ad9389b_rd(sd, 0x3d) & 0x3f;
444  u32 CTS;
445 
446  if (manual_cts)
447  CTS = (ad9389b_rd(sd, 0x07) & 0xf) << 16 |
448  ad9389b_rd(sd, 0x08) << 8 |
449  ad9389b_rd(sd, 0x09);
450  else
451  CTS = (ad9389b_rd(sd, 0x04) & 0xf) << 16 |
452  ad9389b_rd(sd, 0x05) << 8 |
453  ad9389b_rd(sd, 0x06);
454  N = (ad9389b_rd(sd, 0x01) & 0xf) << 16 |
455  ad9389b_rd(sd, 0x02) << 8 |
456  ad9389b_rd(sd, 0x03);
457 
458  v4l2_info(sd, "ad9389b: CTS %s mode: N %d, CTS %d\n",
459  manual_cts ? "manual" : "automatic", N, CTS);
460 
461  v4l2_info(sd, "ad9389b: VIC: detected %d, sent %d\n",
462  vic_detect, vic_sent);
463  }
464  }
465  if (state->dv_timings.type == V4L2_DV_BT_656_1120) {
466  struct v4l2_bt_timings *bt = bt = &state->dv_timings.bt;
467  u32 frame_width = bt->width + bt->hfrontporch +
468  bt->hsync + bt->hbackporch;
469  u32 frame_height = bt->height + bt->vfrontporch +
470  bt->vsync + bt->vbackporch;
471  u32 frame_size = frame_width * frame_height;
472 
473  v4l2_info(sd, "timings: %ux%u%s%u (%ux%u). Pix freq. = %u Hz. Polarities = 0x%x\n",
474  bt->width, bt->height, bt->interlaced ? "i" : "p",
475  frame_size > 0 ? (unsigned)bt->pixelclock / frame_size : 0,
476  frame_width, frame_height,
477  (unsigned)bt->pixelclock, bt->polarities);
478  } else {
479  v4l2_info(sd, "no timings set\n");
480  }
481  return 0;
482 }
483 
484 /* Power up/down ad9389b */
485 static int ad9389b_s_power(struct v4l2_subdev *sd, int on)
486 {
487  struct ad9389b_state *state = get_ad9389b_state(sd);
488  struct ad9389b_platform_data *pdata = &state->pdata;
489  const int retries = 20;
490  int i;
491 
492  v4l2_dbg(1, debug, sd, "%s: power %s\n", __func__, on ? "on" : "off");
493 
494  state->power_on = on;
495 
496  if (!on) {
497  /* Power down */
498  ad9389b_wr_and_or(sd, 0x41, 0xbf, 0x40);
499  return true;
500  }
501 
502  /* Power up */
503  /* The ad9389b does not always come up immediately.
504  Retry multiple times. */
505  for (i = 0; i < retries; i++) {
506  ad9389b_wr_and_or(sd, 0x41, 0xbf, 0x0);
507  if ((ad9389b_rd(sd, 0x41) & 0x40) == 0)
508  break;
509  ad9389b_wr_and_or(sd, 0x41, 0xbf, 0x40);
510  msleep(10);
511  }
512  if (i == retries) {
513  v4l2_dbg(1, debug, sd, "failed to powerup the ad9389b\n");
514  ad9389b_s_power(sd, 0);
515  return false;
516  }
517  if (i > 1)
518  v4l2_dbg(1, debug, sd,
519  "needed %d retries to powerup the ad9389b\n", i);
520 
521  /* Select chip: AD9389B */
522  ad9389b_wr_and_or(sd, 0xba, 0xef, 0x10);
523 
524  /* Reserved registers that must be set according to REF_01 p. 11*/
525  ad9389b_wr_and_or(sd, 0x98, 0xf0, 0x07);
526  ad9389b_wr(sd, 0x9c, 0x38);
527  ad9389b_wr_and_or(sd, 0x9d, 0xfc, 0x01);
528 
529  /* Differential output drive strength */
530  if (pdata->diff_data_drive_strength > 0)
531  ad9389b_wr(sd, 0xa2, pdata->diff_data_drive_strength);
532  else
533  ad9389b_wr(sd, 0xa2, 0x87);
534 
535  if (pdata->diff_clk_drive_strength > 0)
536  ad9389b_wr(sd, 0xa3, pdata->diff_clk_drive_strength);
537  else
538  ad9389b_wr(sd, 0xa3, 0x87);
539 
540  ad9389b_wr(sd, 0x0a, 0x01);
541  ad9389b_wr(sd, 0xbb, 0xff);
542 
543  /* Set number of attempts to read the EDID */
544  ad9389b_wr(sd, 0xc9, 0xf);
545  return true;
546 }
547 
548 /* Enable interrupts */
549 static void ad9389b_set_isr(struct v4l2_subdev *sd, bool enable)
550 {
552  u8 irqs_rd;
553  int retries = 100;
554 
555  /* The datasheet says that the EDID ready interrupt should be
556  disabled if there is no hotplug. */
557  if (!enable)
558  irqs = 0;
559  else if (ad9389b_have_hotplug(sd))
561 
562  /*
563  * This i2c write can fail (approx. 1 in 1000 writes). But it
564  * is essential that this register is correct, so retry it
565  * multiple times.
566  *
567  * Note that the i2c write does not report an error, but the readback
568  * clearly shows the wrong value.
569  */
570  do {
571  ad9389b_wr(sd, 0x94, irqs);
572  irqs_rd = ad9389b_rd(sd, 0x94);
573  } while (retries-- && irqs_rd != irqs);
574 
575  if (irqs_rd != irqs)
576  v4l2_err(sd, "Could not set interrupts: hw failure?\n");
577 }
578 
579 /* Interrupt handler */
580 static int ad9389b_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
581 {
582  u8 irq_status;
583 
584  /* disable interrupts to prevent a race condition */
585  ad9389b_set_isr(sd, false);
586  irq_status = ad9389b_rd(sd, 0x96);
587  /* clear detected interrupts */
588  ad9389b_wr(sd, 0x96, irq_status);
589 
590  if (irq_status & (MASK_AD9389B_HPD_INT | MASK_AD9389B_MSEN_INT))
591  ad9389b_check_monitor_present_status(sd);
592  if (irq_status & MASK_AD9389B_EDID_RDY_INT)
593  ad9389b_check_edid_status(sd);
594 
595  /* enable interrupts */
596  ad9389b_set_isr(sd, true);
597  *handled = true;
598  return 0;
599 }
600 
601 static const struct v4l2_subdev_core_ops ad9389b_core_ops = {
602  .log_status = ad9389b_log_status,
603  .g_chip_ident = ad9389b_g_chip_ident,
604 #ifdef CONFIG_VIDEO_ADV_DEBUG
605  .g_register = ad9389b_g_register,
606  .s_register = ad9389b_s_register,
607 #endif
608  .s_power = ad9389b_s_power,
609  .interrupt_service_routine = ad9389b_isr,
610 };
611 
612 /* ------------------------------ PAD OPS ------------------------------ */
613 
614 static int ad9389b_get_edid(struct v4l2_subdev *sd, struct v4l2_subdev_edid *edid)
615 {
616  struct ad9389b_state *state = get_ad9389b_state(sd);
617 
618  if (edid->pad != 0)
619  return -EINVAL;
620  if (edid->blocks == 0 || edid->blocks > 256)
621  return -EINVAL;
622  if (!edid->edid)
623  return -EINVAL;
624  if (!state->edid.segments) {
625  v4l2_dbg(1, debug, sd, "EDID segment 0 not found\n");
626  return -ENODATA;
627  }
628  if (edid->start_block >= state->edid.segments * 2)
629  return -E2BIG;
630  if (edid->blocks + edid->start_block >= state->edid.segments * 2)
631  edid->blocks = state->edid.segments * 2 - edid->start_block;
632  memcpy(edid->edid, &state->edid.data[edid->start_block * 128],
633  128 * edid->blocks);
634  return 0;
635 }
636 
637 static const struct v4l2_subdev_pad_ops ad9389b_pad_ops = {
638  .get_edid = ad9389b_get_edid,
639 };
640 
641 /* ------------------------------ VIDEO OPS ------------------------------ */
642 
643 /* Enable/disable ad9389b output */
644 static int ad9389b_s_stream(struct v4l2_subdev *sd, int enable)
645 {
646  struct ad9389b_state *state = get_ad9389b_state(sd);
647 
648  v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
649 
650  ad9389b_wr_and_or(sd, 0xa1, ~0x3c, (enable ? 0 : 0x3c));
651  if (enable) {
652  ad9389b_check_monitor_present_status(sd);
653  } else {
654  ad9389b_s_power(sd, 0);
655  state->have_monitor = false;
656  }
657  return 0;
658 }
659 
660 static const struct v4l2_dv_timings ad9389b_timings[] = {
673 
720  {},
721 };
722 
723 static int ad9389b_s_dv_timings(struct v4l2_subdev *sd,
724  struct v4l2_dv_timings *timings)
725 {
726  struct ad9389b_state *state = get_ad9389b_state(sd);
727  int i;
728 
729  v4l2_dbg(1, debug, sd, "%s:\n", __func__);
730 
731  /* quick sanity check */
732  if (timings->type != V4L2_DV_BT_656_1120)
733  return -EINVAL;
734 
735  if (timings->bt.interlaced)
736  return -EINVAL;
737  if (timings->bt.pixelclock < 27000000 ||
738  timings->bt.pixelclock > 170000000)
739  return -EINVAL;
740 
741  /* Fill the optional fields .standards and .flags in struct v4l2_dv_timings
742  if the format is listed in ad9389b_timings[] */
743  for (i = 0; ad9389b_timings[i].bt.width; i++) {
744  if (v4l_match_dv_timings(timings, &ad9389b_timings[i], 0)) {
745  *timings = ad9389b_timings[i];
746  break;
747  }
748  }
749 
750  timings->bt.flags &= ~V4L2_DV_FL_REDUCED_FPS;
751 
752  /* save timings */
753  state->dv_timings = *timings;
754 
755  /* update quantization range based on new dv_timings */
756  ad9389b_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
757 
758  /* update PLL gear based on new dv_timings */
759  if (state->pdata.tmds_pll_gear == AD9389B_TMDS_PLL_GEAR_SEMI_AUTOMATIC)
760  ad9389b_set_manual_pll_gear(sd, (u32)timings->bt.pixelclock);
761 
762  /* update AVI infoframe */
763  ad9389b_set_IT_content_AVI_InfoFrame(sd);
764 
765  return 0;
766 }
767 
768 static int ad9389b_g_dv_timings(struct v4l2_subdev *sd,
769  struct v4l2_dv_timings *timings)
770 {
771  struct ad9389b_state *state = get_ad9389b_state(sd);
772 
773  v4l2_dbg(1, debug, sd, "%s:\n", __func__);
774 
775  if (!timings)
776  return -EINVAL;
777 
778  *timings = state->dv_timings;
779 
780  return 0;
781 }
782 
783 static int ad9389b_enum_dv_timings(struct v4l2_subdev *sd,
784  struct v4l2_enum_dv_timings *timings)
785 {
786  if (timings->index >= ARRAY_SIZE(ad9389b_timings))
787  return -EINVAL;
788 
789  memset(timings->reserved, 0, sizeof(timings->reserved));
790  timings->timings = ad9389b_timings[timings->index];
791  return 0;
792 }
793 
794 static int ad9389b_dv_timings_cap(struct v4l2_subdev *sd,
795  struct v4l2_dv_timings_cap *cap)
796 {
797  cap->type = V4L2_DV_BT_656_1120;
798  cap->bt.max_width = 1920;
799  cap->bt.max_height = 1200;
800  cap->bt.min_pixelclock = 27000000;
801  cap->bt.max_pixelclock = 170000000;
802  cap->bt.standards = V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
804  cap->bt.capabilities = V4L2_DV_BT_CAP_PROGRESSIVE |
806  return 0;
807 }
808 
809 static const struct v4l2_subdev_video_ops ad9389b_video_ops = {
810  .s_stream = ad9389b_s_stream,
811  .s_dv_timings = ad9389b_s_dv_timings,
812  .g_dv_timings = ad9389b_g_dv_timings,
813  .enum_dv_timings = ad9389b_enum_dv_timings,
814  .dv_timings_cap = ad9389b_dv_timings_cap,
815 };
816 
817 static int ad9389b_s_audio_stream(struct v4l2_subdev *sd, int enable)
818 {
819  v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
820 
821  if (enable)
822  ad9389b_wr_and_or(sd, 0x45, 0x3f, 0x80);
823  else
824  ad9389b_wr_and_or(sd, 0x45, 0x3f, 0x40);
825 
826  return 0;
827 }
828 
829 static int ad9389b_s_clock_freq(struct v4l2_subdev *sd, u32 freq)
830 {
831  u32 N;
832 
833  switch (freq) {
834  case 32000: N = 4096; break;
835  case 44100: N = 6272; break;
836  case 48000: N = 6144; break;
837  case 88200: N = 12544; break;
838  case 96000: N = 12288; break;
839  case 176400: N = 25088; break;
840  case 192000: N = 24576; break;
841  default:
842  return -EINVAL;
843  }
844 
845  /* Set N (used with CTS to regenerate the audio clock) */
846  ad9389b_wr(sd, 0x01, (N >> 16) & 0xf);
847  ad9389b_wr(sd, 0x02, (N >> 8) & 0xff);
848  ad9389b_wr(sd, 0x03, N & 0xff);
849 
850  return 0;
851 }
852 
853 static int ad9389b_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq)
854 {
855  u32 i2s_sf;
856 
857  switch (freq) {
858  case 32000: i2s_sf = 0x30; break;
859  case 44100: i2s_sf = 0x00; break;
860  case 48000: i2s_sf = 0x20; break;
861  case 88200: i2s_sf = 0x80; break;
862  case 96000: i2s_sf = 0xa0; break;
863  case 176400: i2s_sf = 0xc0; break;
864  case 192000: i2s_sf = 0xe0; break;
865  default:
866  return -EINVAL;
867  }
868 
869  /* Set sampling frequency for I2S audio to 48 kHz */
870  ad9389b_wr_and_or(sd, 0x15, 0xf, i2s_sf);
871 
872  return 0;
873 }
874 
875 static int ad9389b_s_routing(struct v4l2_subdev *sd, u32 input, u32 output, u32 config)
876 {
877  /* TODO based on input/output/config */
878  /* TODO See datasheet "Programmers guide" p. 39-40 */
879 
880  /* Only 2 channels in use for application */
881  ad9389b_wr_and_or(sd, 0x50, 0x1f, 0x20);
882  /* Speaker mapping */
883  ad9389b_wr(sd, 0x51, 0x00);
884 
885  /* TODO Where should this be placed? */
886  /* 16 bit audio word length */
887  ad9389b_wr_and_or(sd, 0x14, 0xf0, 0x02);
888 
889  return 0;
890 }
891 
892 static const struct v4l2_subdev_audio_ops ad9389b_audio_ops = {
893  .s_stream = ad9389b_s_audio_stream,
894  .s_clock_freq = ad9389b_s_clock_freq,
895  .s_i2s_clock_freq = ad9389b_s_i2s_clock_freq,
896  .s_routing = ad9389b_s_routing,
897 };
898 
899 /* --------------------- SUBDEV OPS --------------------------------------- */
900 
901 static const struct v4l2_subdev_ops ad9389b_ops = {
902  .core = &ad9389b_core_ops,
903  .video = &ad9389b_video_ops,
904  .audio = &ad9389b_audio_ops,
905  .pad = &ad9389b_pad_ops,
906 };
907 
908 /* ----------------------------------------------------------------------- */
909 static void ad9389b_dbg_dump_edid(int lvl, int debug, struct v4l2_subdev *sd,
910  int segment, u8 *buf)
911 {
912  int i, j;
913 
914  if (debug < lvl)
915  return;
916 
917  v4l2_dbg(lvl, debug, sd, "edid segment %d\n", segment);
918  for (i = 0; i < 256; i += 16) {
919  u8 b[128];
920  u8 *bp = b;
921 
922  if (i == 128)
923  v4l2_dbg(lvl, debug, sd, "\n");
924  for (j = i; j < i + 16; j++) {
925  sprintf(bp, "0x%02x, ", buf[j]);
926  bp += 6;
927  }
928  bp[0] = '\0';
929  v4l2_dbg(lvl, debug, sd, "%s\n", b);
930  }
931 }
932 
933 static void ad9389b_edid_handler(struct work_struct *work)
934 {
935  struct delayed_work *dwork = to_delayed_work(work);
936  struct ad9389b_state *state = container_of(dwork,
937  struct ad9389b_state, edid_handler);
938  struct v4l2_subdev *sd = &state->sd;
939  struct ad9389b_edid_detect ed;
940 
941  v4l2_dbg(1, debug, sd, "%s:\n", __func__);
942 
943  if (ad9389b_check_edid_status(sd)) {
944  /* Return if we received the EDID. */
945  return;
946  }
947 
948  if (ad9389b_have_hotplug(sd)) {
949  /* We must retry reading the EDID several times, it is possible
950  * that initially the EDID couldn't be read due to i2c errors
951  * (DVI connectors are particularly prone to this problem). */
952  if (state->edid.read_retries) {
953  state->edid.read_retries--;
954  /* EDID read failed, trigger a retry */
955  ad9389b_wr(sd, 0xc9, 0xf);
957  &state->edid_handler, EDID_DELAY);
958  return;
959  }
960  }
961 
962  /* We failed to read the EDID, so send an event for this. */
963  ed.present = false;
964  ed.segment = ad9389b_rd(sd, 0xc4);
966  v4l2_dbg(1, debug, sd, "%s: no edid found\n", __func__);
967 }
968 
969 static void ad9389b_audio_setup(struct v4l2_subdev *sd)
970 {
971  v4l2_dbg(1, debug, sd, "%s\n", __func__);
972 
973  ad9389b_s_i2s_clock_freq(sd, 48000);
974  ad9389b_s_clock_freq(sd, 48000);
975  ad9389b_s_routing(sd, 0, 0, 0);
976 }
977 
978 /* Initial setup of AD9389b */
979 
980 /* Configure hdmi transmitter. */
981 static void ad9389b_setup(struct v4l2_subdev *sd)
982 {
983  struct ad9389b_state *state = get_ad9389b_state(sd);
984 
985  v4l2_dbg(1, debug, sd, "%s\n", __func__);
986 
987  /* Input format: RGB 4:4:4 */
988  ad9389b_wr_and_or(sd, 0x15, 0xf1, 0x0);
989  /* Output format: RGB 4:4:4 */
990  ad9389b_wr_and_or(sd, 0x16, 0x3f, 0x0);
991  /* CSC fixed point: +/-2, 1st order interpolation 4:2:2 -> 4:4:4 up
992  conversion, Aspect ratio: 16:9 */
993  ad9389b_wr_and_or(sd, 0x17, 0xe1, 0x0e);
994  /* Disable pixel repetition and CSC */
995  ad9389b_wr_and_or(sd, 0x3b, 0x9e, 0x0);
996  /* Output format: RGB 4:4:4, Active Format Information is valid. */
997  ad9389b_wr_and_or(sd, 0x45, 0xc7, 0x08);
998  /* Underscanned */
999  ad9389b_wr_and_or(sd, 0x46, 0x3f, 0x80);
1000  /* Setup video format */
1001  ad9389b_wr(sd, 0x3c, 0x0);
1002  /* Active format aspect ratio: same as picure. */
1003  ad9389b_wr(sd, 0x47, 0x80);
1004  /* No encryption */
1005  ad9389b_wr_and_or(sd, 0xaf, 0xef, 0x0);
1006  /* Positive clk edge capture for input video clock */
1007  ad9389b_wr_and_or(sd, 0xba, 0x1f, 0x60);
1008 
1009  ad9389b_audio_setup(sd);
1010 
1011  v4l2_ctrl_handler_setup(&state->hdl);
1012 
1013  ad9389b_set_IT_content_AVI_InfoFrame(sd);
1014 }
1015 
1016 static void ad9389b_notify_monitor_detect(struct v4l2_subdev *sd)
1017 {
1018  struct ad9389b_monitor_detect mdt;
1019  struct ad9389b_state *state = get_ad9389b_state(sd);
1020 
1021  mdt.present = state->have_monitor;
1022  v4l2_subdev_notify(sd, AD9389B_MONITOR_DETECT, (void *)&mdt);
1023 }
1024 
1025 static void ad9389b_check_monitor_present_status(struct v4l2_subdev *sd)
1026 {
1027  struct ad9389b_state *state = get_ad9389b_state(sd);
1028  /* read hotplug and rx-sense state */
1029  u8 status = ad9389b_rd(sd, 0x42);
1030 
1031  v4l2_dbg(1, debug, sd, "%s: status: 0x%x%s%s\n",
1032  __func__,
1033  status,
1034  status & MASK_AD9389B_HPD_DETECT ? ", hotplug" : "",
1035  status & MASK_AD9389B_MSEN_DETECT ? ", rx-sense" : "");
1036 
1037  if ((status & MASK_AD9389B_HPD_DETECT) &&
1038  ((status & MASK_AD9389B_MSEN_DETECT) || state->edid.segments)) {
1039  v4l2_dbg(1, debug, sd,
1040  "%s: hotplug and (rx-sense or edid)\n", __func__);
1041  if (!state->have_monitor) {
1042  v4l2_dbg(1, debug, sd, "%s: monitor detected\n", __func__);
1043  state->have_monitor = true;
1044  ad9389b_set_isr(sd, true);
1045  if (!ad9389b_s_power(sd, true)) {
1046  v4l2_dbg(1, debug, sd,
1047  "%s: monitor detected, powerup failed\n", __func__);
1048  return;
1049  }
1050  ad9389b_setup(sd);
1051  ad9389b_notify_monitor_detect(sd);
1052  state->edid.read_retries = EDID_MAX_RETRIES;
1054  &state->edid_handler, EDID_DELAY);
1055  }
1056  } else if (status & MASK_AD9389B_HPD_DETECT) {
1057  v4l2_dbg(1, debug, sd, "%s: hotplug detected\n", __func__);
1058  state->edid.read_retries = EDID_MAX_RETRIES;
1060  &state->edid_handler, EDID_DELAY);
1061  } else if (!(status & MASK_AD9389B_HPD_DETECT)) {
1062  v4l2_dbg(1, debug, sd, "%s: hotplug not detected\n", __func__);
1063  if (state->have_monitor) {
1064  v4l2_dbg(1, debug, sd, "%s: monitor not detected\n", __func__);
1065  state->have_monitor = false;
1066  ad9389b_notify_monitor_detect(sd);
1067  }
1068  ad9389b_s_power(sd, false);
1069  memset(&state->edid, 0, sizeof(struct ad9389b_state_edid));
1070  }
1071 
1072  /* update read only ctrls */
1073  v4l2_ctrl_s_ctrl(state->hotplug_ctrl, ad9389b_have_hotplug(sd) ? 0x1 : 0x0);
1074  v4l2_ctrl_s_ctrl(state->rx_sense_ctrl, ad9389b_have_rx_sense(sd) ? 0x1 : 0x0);
1075  v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, state->edid.segments ? 0x1 : 0x0);
1076 }
1077 
1078 static bool edid_block_verify_crc(u8 *edid_block)
1079 {
1080  int i;
1081  u8 sum = 0;
1082 
1083  for (i = 0; i < 127; i++)
1084  sum += *(edid_block + i);
1085  return ((255 - sum + 1) == edid_block[127]);
1086 }
1087 
1088 static bool edid_segment_verify_crc(struct v4l2_subdev *sd, u32 segment)
1089 {
1090  struct ad9389b_state *state = get_ad9389b_state(sd);
1091  u32 blocks = state->edid.blocks;
1092  u8 *data = state->edid.data;
1093 
1094  if (edid_block_verify_crc(&data[segment * 256])) {
1095  if ((segment + 1) * 2 <= blocks)
1096  return edid_block_verify_crc(&data[segment * 256 + 128]);
1097  return true;
1098  }
1099  return false;
1100 }
1101 
1102 static bool ad9389b_check_edid_status(struct v4l2_subdev *sd)
1103 {
1104  struct ad9389b_state *state = get_ad9389b_state(sd);
1105  struct ad9389b_edid_detect ed;
1106  int segment;
1107  u8 edidRdy = ad9389b_rd(sd, 0xc5);
1108 
1109  v4l2_dbg(1, debug, sd, "%s: edid ready (retries: %d)\n",
1110  __func__, EDID_MAX_RETRIES - state->edid.read_retries);
1111 
1112  if (!(edidRdy & MASK_AD9389B_EDID_RDY))
1113  return false;
1114 
1115  segment = ad9389b_rd(sd, 0xc4);
1116  if (segment >= EDID_MAX_SEGM) {
1117  v4l2_err(sd, "edid segment number too big\n");
1118  return false;
1119  }
1120  v4l2_dbg(1, debug, sd, "%s: got segment %d\n", __func__, segment);
1121  ad9389b_edid_rd(sd, 256, &state->edid.data[segment * 256]);
1122  ad9389b_dbg_dump_edid(2, debug, sd, segment,
1123  &state->edid.data[segment * 256]);
1124  if (segment == 0) {
1125  state->edid.blocks = state->edid.data[0x7e] + 1;
1126  v4l2_dbg(1, debug, sd, "%s: %d blocks in total\n",
1127  __func__, state->edid.blocks);
1128  }
1129  if (!edid_segment_verify_crc(sd, segment)) {
1130  /* edid crc error, force reread of edid segment */
1131  ad9389b_s_power(sd, false);
1132  ad9389b_s_power(sd, true);
1133  return false;
1134  }
1135  /* one more segment read ok */
1136  state->edid.segments = segment + 1;
1137  if (((state->edid.data[0x7e] >> 1) + 1) > state->edid.segments) {
1138  /* Request next EDID segment */
1139  v4l2_dbg(1, debug, sd, "%s: request segment %d\n",
1140  __func__, state->edid.segments);
1141  ad9389b_wr(sd, 0xc9, 0xf);
1142  ad9389b_wr(sd, 0xc4, state->edid.segments);
1143  state->edid.read_retries = EDID_MAX_RETRIES;
1145  &state->edid_handler, EDID_DELAY);
1146  return false;
1147  }
1148 
1149  /* report when we have all segments but report only for segment 0 */
1150  ed.present = true;
1151  ed.segment = 0;
1152  v4l2_subdev_notify(sd, AD9389B_EDID_DETECT, (void *)&ed);
1153  state->edid_detect_counter++;
1154  v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, state->edid.segments ? 0x1 : 0x0);
1155  return ed.present;
1156 }
1157 
1158 /* ----------------------------------------------------------------------- */
1159 
1160 static void ad9389b_init_setup(struct v4l2_subdev *sd)
1161 {
1162  struct ad9389b_state *state = get_ad9389b_state(sd);
1163  struct ad9389b_state_edid *edid = &state->edid;
1164 
1165  v4l2_dbg(1, debug, sd, "%s\n", __func__);
1166 
1167  /* clear all interrupts */
1168  ad9389b_wr(sd, 0x96, 0xff);
1169 
1170  memset(edid, 0, sizeof(struct ad9389b_state_edid));
1171  state->have_monitor = false;
1172  ad9389b_set_isr(sd, false);
1173 }
1174 
1175 static int ad9389b_probe(struct i2c_client *client, const struct i2c_device_id *id)
1176 {
1177  const struct v4l2_dv_timings dv1080p60 = V4L2_DV_BT_CEA_1920X1080P60;
1178  struct ad9389b_state *state;
1179  struct ad9389b_platform_data *pdata = client->dev.platform_data;
1180  struct v4l2_ctrl_handler *hdl;
1181  struct v4l2_subdev *sd;
1182  int err = -EIO;
1183 
1184  /* Check if the adapter supports the needed features */
1185  if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1186  return -EIO;
1187 
1188  v4l_dbg(1, debug, client, "detecting ad9389b client on address 0x%x\n",
1189  client->addr << 1);
1190 
1191  state = kzalloc(sizeof(struct ad9389b_state), GFP_KERNEL);
1192  if (!state)
1193  return -ENOMEM;
1194 
1195  /* Platform data */
1196  if (pdata == NULL) {
1197  v4l_err(client, "No platform data!\n");
1198  err = -ENODEV;
1199  goto err_free;
1200  }
1201  memcpy(&state->pdata, pdata, sizeof(state->pdata));
1202 
1203  sd = &state->sd;
1204  v4l2_i2c_subdev_init(sd, client, &ad9389b_ops);
1206 
1207  hdl = &state->hdl;
1208  v4l2_ctrl_handler_init(hdl, 5);
1209 
1210  /* private controls */
1211 
1212  state->hdmi_mode_ctrl = v4l2_ctrl_new_std_menu(hdl, &ad9389b_ctrl_ops,
1215  state->hdmi_mode_ctrl->is_private = true;
1216  state->hotplug_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1217  V4L2_CID_DV_TX_HOTPLUG, 0, 1, 0, 0);
1218  state->hotplug_ctrl->is_private = true;
1219  state->rx_sense_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1220  V4L2_CID_DV_TX_RXSENSE, 0, 1, 0, 0);
1221  state->rx_sense_ctrl->is_private = true;
1222  state->have_edid0_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1223  V4L2_CID_DV_TX_EDID_PRESENT, 0, 1, 0, 0);
1224  state->have_edid0_ctrl->is_private = true;
1226  v4l2_ctrl_new_std_menu(hdl, &ad9389b_ctrl_ops,
1229  state->rgb_quantization_range_ctrl->is_private = true;
1230  sd->ctrl_handler = hdl;
1231  if (hdl->error) {
1232  err = hdl->error;
1233 
1234  goto err_hdl;
1235  }
1236 
1237  state->pad.flags = MEDIA_PAD_FL_SINK;
1238  err = media_entity_init(&sd->entity, 1, &state->pad, 0);
1239  if (err)
1240  goto err_hdl;
1241 
1242  state->chip_revision = ad9389b_rd(sd, 0x0);
1243  if (state->chip_revision != 2) {
1244  v4l2_err(sd, "chip_revision %d != 2\n", state->chip_revision);
1245  err = -EIO;
1246  goto err_entity;
1247  }
1248  v4l2_dbg(1, debug, sd, "reg 0x41 0x%x, chip version (reg 0x00) 0x%x\n",
1249  ad9389b_rd(sd, 0x41), state->chip_revision);
1250 
1251  state->edid_i2c_client = i2c_new_dummy(client->adapter, (0x7e>>1));
1252  if (state->edid_i2c_client == NULL) {
1253  v4l2_err(sd, "failed to register edid i2c client\n");
1254  goto err_entity;
1255  }
1256 
1258  if (state->work_queue == NULL) {
1259  v4l2_err(sd, "could not create workqueue\n");
1260  goto err_unreg;
1261  }
1262 
1263  INIT_DELAYED_WORK(&state->edid_handler, ad9389b_edid_handler);
1264  state->dv_timings = dv1080p60;
1265 
1266  ad9389b_init_setup(sd);
1267  ad9389b_set_isr(sd, true);
1268 
1269  v4l2_info(sd, "%s found @ 0x%x (%s)\n", client->name,
1270  client->addr << 1, client->adapter->name);
1271  return 0;
1272 
1273 err_unreg:
1275 err_entity:
1276  media_entity_cleanup(&sd->entity);
1277 err_hdl:
1278  v4l2_ctrl_handler_free(&state->hdl);
1279 err_free:
1280  kfree(state);
1281  return err;
1282 }
1283 
1284 /* ----------------------------------------------------------------------- */
1285 
1286 static int ad9389b_remove(struct i2c_client *client)
1287 {
1288  struct v4l2_subdev *sd = i2c_get_clientdata(client);
1289  struct ad9389b_state *state = get_ad9389b_state(sd);
1290 
1291  state->chip_revision = -1;
1292 
1293  v4l2_dbg(1, debug, sd, "%s removed @ 0x%x (%s)\n", client->name,
1294  client->addr << 1, client->adapter->name);
1295 
1296  ad9389b_s_stream(sd, false);
1297  ad9389b_s_audio_stream(sd, false);
1298  ad9389b_init_setup(sd);
1301  destroy_workqueue(state->work_queue);
1303  media_entity_cleanup(&sd->entity);
1305  kfree(get_ad9389b_state(sd));
1306  return 0;
1307 }
1308 
1309 /* ----------------------------------------------------------------------- */
1310 
1311 static struct i2c_device_id ad9389b_id[] = {
1312  { "ad9389b", V4L2_IDENT_AD9389B },
1313  { "ad9889b", V4L2_IDENT_AD9389B },
1314  { }
1315 };
1316 MODULE_DEVICE_TABLE(i2c, ad9389b_id);
1317 
1318 static struct i2c_driver ad9389b_driver = {
1319  .driver = {
1320  .owner = THIS_MODULE,
1321  .name = "ad9389b",
1322  },
1323  .probe = ad9389b_probe,
1324  .remove = ad9389b_remove,
1325  .id_table = ad9389b_id,
1326 };
1327 
1328 module_i2c_driver(ad9389b_driver);