1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Analog Devices AD9389B/AD9889B video encoder driver
4 *
5 * Copyright 2012 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
6 */
7
8 /*
9 * References (c = chapter, p = page):
10 * REF_01 - Analog Devices, Programming Guide, AD9889B/AD9389B,
11 * HDMI Transitter, Rev. A, October 2010
12 */
13
14 #include <linux/kernel.h>
15 #include <linux/module.h>
16 #include <linux/slab.h>
17 #include <linux/i2c.h>
18 #include <linux/delay.h>
19 #include <linux/videodev2.h>
20 #include <linux/workqueue.h>
21 #include <linux/v4l2-dv-timings.h>
22 #include <media/v4l2-device.h>
23 #include <media/v4l2-common.h>
24 #include <media/v4l2-dv-timings.h>
25 #include <media/v4l2-ctrls.h>
26 #include <media/i2c/ad9389b.h>
27
28 static int debug;
29 module_param(debug, int, 0644);
30 MODULE_PARM_DESC(debug, "debug level (0-2)");
31
32 MODULE_DESCRIPTION("Analog Devices AD9389B/AD9889B video encoder driver");
33 MODULE_AUTHOR("Hans Verkuil <hans.verkuil@cisco.com>");
34 MODULE_AUTHOR("Martin Bugge <marbugge@cisco.com>");
35 MODULE_LICENSE("GPL");
36
37 #define MASK_AD9389B_EDID_RDY_INT 0x04
38 #define MASK_AD9389B_MSEN_INT 0x40
39 #define MASK_AD9389B_HPD_INT 0x80
40
41 #define MASK_AD9389B_HPD_DETECT 0x40
42 #define MASK_AD9389B_MSEN_DETECT 0x20
43 #define MASK_AD9389B_EDID_RDY 0x10
44
45 #define EDID_MAX_RETRIES (8)
46 #define EDID_DELAY 250
47 #define EDID_MAX_SEGM 8
48
49 /*
50 **********************************************************************
51 *
52 * Arrays with configuration parameters for the AD9389B
53 *
54 **********************************************************************
55 */
56
57 struct ad9389b_state_edid {
58 /* total number of blocks */
59 u32 blocks;
60 /* Number of segments read */
61 u32 segments;
62 u8 data[EDID_MAX_SEGM * 256];
63 /* Number of EDID read retries left */
64 unsigned read_retries;
65 };
66
67 struct ad9389b_state {
68 struct ad9389b_platform_data pdata;
69 struct v4l2_subdev sd;
70 struct media_pad pad;
71 struct v4l2_ctrl_handler hdl;
72 int chip_revision;
73 /* Is the ad9389b powered on? */
74 bool power_on;
75 /* Did we receive hotplug and rx-sense signals? */
76 bool have_monitor;
77 /* timings from s_dv_timings */
78 struct v4l2_dv_timings dv_timings;
79 /* controls */
80 struct v4l2_ctrl *hdmi_mode_ctrl;
81 struct v4l2_ctrl *hotplug_ctrl;
82 struct v4l2_ctrl *rx_sense_ctrl;
83 struct v4l2_ctrl *have_edid0_ctrl;
84 struct v4l2_ctrl *rgb_quantization_range_ctrl;
85 struct i2c_client *edid_i2c_client;
86 struct ad9389b_state_edid edid;
87 /* Running counter of the number of detected EDIDs (for debugging) */
88 unsigned edid_detect_counter;
89 struct delayed_work edid_handler; /* work entry */
90 };
91
92 static void ad9389b_check_monitor_present_status(struct v4l2_subdev *sd);
93 static bool ad9389b_check_edid_status(struct v4l2_subdev *sd);
94 static void ad9389b_setup(struct v4l2_subdev *sd);
95 static int ad9389b_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq);
96 static int ad9389b_s_clock_freq(struct v4l2_subdev *sd, u32 freq);
97
get_ad9389b_state(struct v4l2_subdev * sd)98 static inline struct ad9389b_state *get_ad9389b_state(struct v4l2_subdev *sd)
99 {
100 return container_of(sd, struct ad9389b_state, sd);
101 }
102
to_sd(struct v4l2_ctrl * ctrl)103 static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl)
104 {
105 return &container_of(ctrl->handler, struct ad9389b_state, hdl)->sd;
106 }
107
108 /* ------------------------ I2C ----------------------------------------------- */
109
ad9389b_rd(struct v4l2_subdev * sd,u8 reg)110 static int ad9389b_rd(struct v4l2_subdev *sd, u8 reg)
111 {
112 struct i2c_client *client = v4l2_get_subdevdata(sd);
113
114 return i2c_smbus_read_byte_data(client, reg);
115 }
116
ad9389b_wr(struct v4l2_subdev * sd,u8 reg,u8 val)117 static int ad9389b_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
118 {
119 struct i2c_client *client = v4l2_get_subdevdata(sd);
120 int ret;
121 int i;
122
123 for (i = 0; i < 3; i++) {
124 ret = i2c_smbus_write_byte_data(client, reg, val);
125 if (ret == 0)
126 return 0;
127 }
128 v4l2_err(sd, "%s: failed reg 0x%x, val 0x%x\n", __func__, reg, val);
129 return ret;
130 }
131
132 /* To set specific bits in the register, a clear-mask is given (to be AND-ed),
133 and then the value-mask (to be OR-ed). */
ad9389b_wr_and_or(struct v4l2_subdev * sd,u8 reg,u8 clr_mask,u8 val_mask)134 static inline void ad9389b_wr_and_or(struct v4l2_subdev *sd, u8 reg,
135 u8 clr_mask, u8 val_mask)
136 {
137 ad9389b_wr(sd, reg, (ad9389b_rd(sd, reg) & clr_mask) | val_mask);
138 }
139
ad9389b_edid_rd(struct v4l2_subdev * sd,u16 len,u8 * buf)140 static void ad9389b_edid_rd(struct v4l2_subdev *sd, u16 len, u8 *buf)
141 {
142 struct ad9389b_state *state = get_ad9389b_state(sd);
143 int i;
144
145 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
146
147 for (i = 0; i < len; i++)
148 buf[i] = i2c_smbus_read_byte_data(state->edid_i2c_client, i);
149 }
150
ad9389b_have_hotplug(struct v4l2_subdev * sd)151 static inline bool ad9389b_have_hotplug(struct v4l2_subdev *sd)
152 {
153 return ad9389b_rd(sd, 0x42) & MASK_AD9389B_HPD_DETECT;
154 }
155
ad9389b_have_rx_sense(struct v4l2_subdev * sd)156 static inline bool ad9389b_have_rx_sense(struct v4l2_subdev *sd)
157 {
158 return ad9389b_rd(sd, 0x42) & MASK_AD9389B_MSEN_DETECT;
159 }
160
ad9389b_csc_conversion_mode(struct v4l2_subdev * sd,u8 mode)161 static void ad9389b_csc_conversion_mode(struct v4l2_subdev *sd, u8 mode)
162 {
163 ad9389b_wr_and_or(sd, 0x17, 0xe7, (mode & 0x3)<<3);
164 ad9389b_wr_and_or(sd, 0x18, 0x9f, (mode & 0x3)<<5);
165 }
166
ad9389b_csc_coeff(struct v4l2_subdev * sd,u16 A1,u16 A2,u16 A3,u16 A4,u16 B1,u16 B2,u16 B3,u16 B4,u16 C1,u16 C2,u16 C3,u16 C4)167 static void ad9389b_csc_coeff(struct v4l2_subdev *sd,
168 u16 A1, u16 A2, u16 A3, u16 A4,
169 u16 B1, u16 B2, u16 B3, u16 B4,
170 u16 C1, u16 C2, u16 C3, u16 C4)
171 {
172 /* A */
173 ad9389b_wr_and_or(sd, 0x18, 0xe0, A1>>8);
174 ad9389b_wr(sd, 0x19, A1);
175 ad9389b_wr_and_or(sd, 0x1A, 0xe0, A2>>8);
176 ad9389b_wr(sd, 0x1B, A2);
177 ad9389b_wr_and_or(sd, 0x1c, 0xe0, A3>>8);
178 ad9389b_wr(sd, 0x1d, A3);
179 ad9389b_wr_and_or(sd, 0x1e, 0xe0, A4>>8);
180 ad9389b_wr(sd, 0x1f, A4);
181
182 /* B */
183 ad9389b_wr_and_or(sd, 0x20, 0xe0, B1>>8);
184 ad9389b_wr(sd, 0x21, B1);
185 ad9389b_wr_and_or(sd, 0x22, 0xe0, B2>>8);
186 ad9389b_wr(sd, 0x23, B2);
187 ad9389b_wr_and_or(sd, 0x24, 0xe0, B3>>8);
188 ad9389b_wr(sd, 0x25, B3);
189 ad9389b_wr_and_or(sd, 0x26, 0xe0, B4>>8);
190 ad9389b_wr(sd, 0x27, B4);
191
192 /* C */
193 ad9389b_wr_and_or(sd, 0x28, 0xe0, C1>>8);
194 ad9389b_wr(sd, 0x29, C1);
195 ad9389b_wr_and_or(sd, 0x2A, 0xe0, C2>>8);
196 ad9389b_wr(sd, 0x2B, C2);
197 ad9389b_wr_and_or(sd, 0x2C, 0xe0, C3>>8);
198 ad9389b_wr(sd, 0x2D, C3);
199 ad9389b_wr_and_or(sd, 0x2E, 0xe0, C4>>8);
200 ad9389b_wr(sd, 0x2F, C4);
201 }
202
ad9389b_csc_rgb_full2limit(struct v4l2_subdev * sd,bool enable)203 static void ad9389b_csc_rgb_full2limit(struct v4l2_subdev *sd, bool enable)
204 {
205 if (enable) {
206 u8 csc_mode = 0;
207
208 ad9389b_csc_conversion_mode(sd, csc_mode);
209 ad9389b_csc_coeff(sd,
210 4096-564, 0, 0, 256,
211 0, 4096-564, 0, 256,
212 0, 0, 4096-564, 256);
213 /* enable CSC */
214 ad9389b_wr_and_or(sd, 0x3b, 0xfe, 0x1);
215 /* AVI infoframe: Limited range RGB (16-235) */
216 ad9389b_wr_and_or(sd, 0xcd, 0xf9, 0x02);
217 } else {
218 /* disable CSC */
219 ad9389b_wr_and_or(sd, 0x3b, 0xfe, 0x0);
220 /* AVI infoframe: Full range RGB (0-255) */
221 ad9389b_wr_and_or(sd, 0xcd, 0xf9, 0x04);
222 }
223 }
224
ad9389b_set_IT_content_AVI_InfoFrame(struct v4l2_subdev * sd)225 static void ad9389b_set_IT_content_AVI_InfoFrame(struct v4l2_subdev *sd)
226 {
227 struct ad9389b_state *state = get_ad9389b_state(sd);
228
229 if (state->dv_timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO) {
230 /* CE format, not IT */
231 ad9389b_wr_and_or(sd, 0xcd, 0xbf, 0x00);
232 } else {
233 /* IT format */
234 ad9389b_wr_and_or(sd, 0xcd, 0xbf, 0x40);
235 }
236 }
237
ad9389b_set_rgb_quantization_mode(struct v4l2_subdev * sd,struct v4l2_ctrl * ctrl)238 static int ad9389b_set_rgb_quantization_mode(struct v4l2_subdev *sd, struct v4l2_ctrl *ctrl)
239 {
240 struct ad9389b_state *state = get_ad9389b_state(sd);
241
242 switch (ctrl->val) {
243 case V4L2_DV_RGB_RANGE_AUTO:
244 /* automatic */
245 if (state->dv_timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO) {
246 /* CE format, RGB limited range (16-235) */
247 ad9389b_csc_rgb_full2limit(sd, true);
248 } else {
249 /* not CE format, RGB full range (0-255) */
250 ad9389b_csc_rgb_full2limit(sd, false);
251 }
252 break;
253 case V4L2_DV_RGB_RANGE_LIMITED:
254 /* RGB limited range (16-235) */
255 ad9389b_csc_rgb_full2limit(sd, true);
256 break;
257 case V4L2_DV_RGB_RANGE_FULL:
258 /* RGB full range (0-255) */
259 ad9389b_csc_rgb_full2limit(sd, false);
260 break;
261 default:
262 return -EINVAL;
263 }
264 return 0;
265 }
266
ad9389b_set_manual_pll_gear(struct v4l2_subdev * sd,u32 pixelclock)267 static void ad9389b_set_manual_pll_gear(struct v4l2_subdev *sd, u32 pixelclock)
268 {
269 u8 gear;
270
271 /* Workaround for TMDS PLL problem
272 * The TMDS PLL in AD9389b change gear when the chip is heated above a
273 * certain temperature. The output is disabled when the PLL change gear
274 * so the monitor has to lock on the signal again. A workaround for
275 * this is to use the manual PLL gears. This is a solution from Analog
276 * Devices that is not documented in the datasheets.
277 * 0x98 [7] = enable manual gearing. 0x98 [6:4] = gear
278 *
279 * The pixel frequency ranges are based on readout of the gear the
280 * automatic gearing selects for different pixel clocks
281 * (read from 0x9e [3:1]).
282 */
283
284 if (pixelclock > 140000000)
285 gear = 0xc0; /* 4th gear */
286 else if (pixelclock > 117000000)
287 gear = 0xb0; /* 3rd gear */
288 else if (pixelclock > 87000000)
289 gear = 0xa0; /* 2nd gear */
290 else if (pixelclock > 60000000)
291 gear = 0x90; /* 1st gear */
292 else
293 gear = 0x80; /* 0th gear */
294
295 ad9389b_wr_and_or(sd, 0x98, 0x0f, gear);
296 }
297
298 /* ------------------------------ CTRL OPS ------------------------------ */
299
ad9389b_s_ctrl(struct v4l2_ctrl * ctrl)300 static int ad9389b_s_ctrl(struct v4l2_ctrl *ctrl)
301 {
302 struct v4l2_subdev *sd = to_sd(ctrl);
303 struct ad9389b_state *state = get_ad9389b_state(sd);
304
305 v4l2_dbg(1, debug, sd,
306 "%s: ctrl id: %d, ctrl->val %d\n", __func__, ctrl->id, ctrl->val);
307
308 if (state->hdmi_mode_ctrl == ctrl) {
309 /* Set HDMI or DVI-D */
310 ad9389b_wr_and_or(sd, 0xaf, 0xfd,
311 ctrl->val == V4L2_DV_TX_MODE_HDMI ? 0x02 : 0x00);
312 return 0;
313 }
314 if (state->rgb_quantization_range_ctrl == ctrl)
315 return ad9389b_set_rgb_quantization_mode(sd, ctrl);
316 return -EINVAL;
317 }
318
319 static const struct v4l2_ctrl_ops ad9389b_ctrl_ops = {
320 .s_ctrl = ad9389b_s_ctrl,
321 };
322
323 /* ---------------------------- CORE OPS ------------------------------------------- */
324
325 #ifdef CONFIG_VIDEO_ADV_DEBUG
ad9389b_g_register(struct v4l2_subdev * sd,struct v4l2_dbg_register * reg)326 static int ad9389b_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
327 {
328 reg->val = ad9389b_rd(sd, reg->reg & 0xff);
329 reg->size = 1;
330 return 0;
331 }
332
ad9389b_s_register(struct v4l2_subdev * sd,const struct v4l2_dbg_register * reg)333 static int ad9389b_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
334 {
335 ad9389b_wr(sd, reg->reg & 0xff, reg->val & 0xff);
336 return 0;
337 }
338 #endif
339
ad9389b_log_status(struct v4l2_subdev * sd)340 static int ad9389b_log_status(struct v4l2_subdev *sd)
341 {
342 struct ad9389b_state *state = get_ad9389b_state(sd);
343 struct ad9389b_state_edid *edid = &state->edid;
344
345 static const char * const states[] = {
346 "in reset",
347 "reading EDID",
348 "idle",
349 "initializing HDCP",
350 "HDCP enabled",
351 "initializing HDCP repeater",
352 "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"
353 };
354 static const char * const errors[] = {
355 "no error",
356 "bad receiver BKSV",
357 "Ri mismatch",
358 "Pj mismatch",
359 "i2c error",
360 "timed out",
361 "max repeater cascade exceeded",
362 "hash check failed",
363 "too many devices",
364 "9", "A", "B", "C", "D", "E", "F"
365 };
366
367 u8 manual_gear;
368
369 v4l2_info(sd, "chip revision %d\n", state->chip_revision);
370 v4l2_info(sd, "power %s\n", state->power_on ? "on" : "off");
371 v4l2_info(sd, "%s hotplug, %s Rx Sense, %s EDID (%d block(s))\n",
372 (ad9389b_rd(sd, 0x42) & MASK_AD9389B_HPD_DETECT) ?
373 "detected" : "no",
374 (ad9389b_rd(sd, 0x42) & MASK_AD9389B_MSEN_DETECT) ?
375 "detected" : "no",
376 edid->segments ? "found" : "no", edid->blocks);
377 v4l2_info(sd, "%s output %s\n",
378 (ad9389b_rd(sd, 0xaf) & 0x02) ?
379 "HDMI" : "DVI-D",
380 (ad9389b_rd(sd, 0xa1) & 0x3c) ?
381 "disabled" : "enabled");
382 v4l2_info(sd, "ad9389b: %s\n", (ad9389b_rd(sd, 0xb8) & 0x40) ?
383 "encrypted" : "no encryption");
384 v4l2_info(sd, "state: %s, error: %s, detect count: %u, msk/irq: %02x/%02x\n",
385 states[ad9389b_rd(sd, 0xc8) & 0xf],
386 errors[ad9389b_rd(sd, 0xc8) >> 4],
387 state->edid_detect_counter,
388 ad9389b_rd(sd, 0x94), ad9389b_rd(sd, 0x96));
389 manual_gear = ad9389b_rd(sd, 0x98) & 0x80;
390 v4l2_info(sd, "ad9389b: RGB quantization: %s range\n",
391 ad9389b_rd(sd, 0x3b) & 0x01 ? "limited" : "full");
392 v4l2_info(sd, "ad9389b: %s gear %d\n",
393 manual_gear ? "manual" : "automatic",
394 manual_gear ? ((ad9389b_rd(sd, 0x98) & 0x70) >> 4) :
395 ((ad9389b_rd(sd, 0x9e) & 0x0e) >> 1));
396 if (ad9389b_rd(sd, 0xaf) & 0x02) {
397 /* HDMI only */
398 u8 manual_cts = ad9389b_rd(sd, 0x0a) & 0x80;
399 u32 N = (ad9389b_rd(sd, 0x01) & 0xf) << 16 |
400 ad9389b_rd(sd, 0x02) << 8 |
401 ad9389b_rd(sd, 0x03);
402 u8 vic_detect = ad9389b_rd(sd, 0x3e) >> 2;
403 u8 vic_sent = ad9389b_rd(sd, 0x3d) & 0x3f;
404 u32 CTS;
405
406 if (manual_cts)
407 CTS = (ad9389b_rd(sd, 0x07) & 0xf) << 16 |
408 ad9389b_rd(sd, 0x08) << 8 |
409 ad9389b_rd(sd, 0x09);
410 else
411 CTS = (ad9389b_rd(sd, 0x04) & 0xf) << 16 |
412 ad9389b_rd(sd, 0x05) << 8 |
413 ad9389b_rd(sd, 0x06);
414 N = (ad9389b_rd(sd, 0x01) & 0xf) << 16 |
415 ad9389b_rd(sd, 0x02) << 8 |
416 ad9389b_rd(sd, 0x03);
417
418 v4l2_info(sd, "ad9389b: CTS %s mode: N %d, CTS %d\n",
419 manual_cts ? "manual" : "automatic", N, CTS);
420
421 v4l2_info(sd, "ad9389b: VIC: detected %d, sent %d\n",
422 vic_detect, vic_sent);
423 }
424 if (state->dv_timings.type == V4L2_DV_BT_656_1120)
425 v4l2_print_dv_timings(sd->name, "timings: ",
426 &state->dv_timings, false);
427 else
428 v4l2_info(sd, "no timings set\n");
429 return 0;
430 }
431
432 /* Power up/down ad9389b */
ad9389b_s_power(struct v4l2_subdev * sd,int on)433 static int ad9389b_s_power(struct v4l2_subdev *sd, int on)
434 {
435 struct ad9389b_state *state = get_ad9389b_state(sd);
436 struct ad9389b_platform_data *pdata = &state->pdata;
437 const int retries = 20;
438 int i;
439
440 v4l2_dbg(1, debug, sd, "%s: power %s\n", __func__, on ? "on" : "off");
441
442 state->power_on = on;
443
444 if (!on) {
445 /* Power down */
446 ad9389b_wr_and_or(sd, 0x41, 0xbf, 0x40);
447 return true;
448 }
449
450 /* Power up */
451 /* The ad9389b does not always come up immediately.
452 Retry multiple times. */
453 for (i = 0; i < retries; i++) {
454 ad9389b_wr_and_or(sd, 0x41, 0xbf, 0x0);
455 if ((ad9389b_rd(sd, 0x41) & 0x40) == 0)
456 break;
457 ad9389b_wr_and_or(sd, 0x41, 0xbf, 0x40);
458 msleep(10);
459 }
460 if (i == retries) {
461 v4l2_dbg(1, debug, sd, "failed to powerup the ad9389b\n");
462 ad9389b_s_power(sd, 0);
463 return false;
464 }
465 if (i > 1)
466 v4l2_dbg(1, debug, sd,
467 "needed %d retries to powerup the ad9389b\n", i);
468
469 /* Select chip: AD9389B */
470 ad9389b_wr_and_or(sd, 0xba, 0xef, 0x10);
471
472 /* Reserved registers that must be set according to REF_01 p. 11*/
473 ad9389b_wr_and_or(sd, 0x98, 0xf0, 0x07);
474 ad9389b_wr(sd, 0x9c, 0x38);
475 ad9389b_wr_and_or(sd, 0x9d, 0xfc, 0x01);
476
477 /* Differential output drive strength */
478 if (pdata->diff_data_drive_strength > 0)
479 ad9389b_wr(sd, 0xa2, pdata->diff_data_drive_strength);
480 else
481 ad9389b_wr(sd, 0xa2, 0x87);
482
483 if (pdata->diff_clk_drive_strength > 0)
484 ad9389b_wr(sd, 0xa3, pdata->diff_clk_drive_strength);
485 else
486 ad9389b_wr(sd, 0xa3, 0x87);
487
488 ad9389b_wr(sd, 0x0a, 0x01);
489 ad9389b_wr(sd, 0xbb, 0xff);
490
491 /* Set number of attempts to read the EDID */
492 ad9389b_wr(sd, 0xc9, 0xf);
493 return true;
494 }
495
496 /* Enable interrupts */
ad9389b_set_isr(struct v4l2_subdev * sd,bool enable)497 static void ad9389b_set_isr(struct v4l2_subdev *sd, bool enable)
498 {
499 u8 irqs = MASK_AD9389B_HPD_INT | MASK_AD9389B_MSEN_INT;
500 u8 irqs_rd;
501 int retries = 100;
502
503 /* The datasheet says that the EDID ready interrupt should be
504 disabled if there is no hotplug. */
505 if (!enable)
506 irqs = 0;
507 else if (ad9389b_have_hotplug(sd))
508 irqs |= MASK_AD9389B_EDID_RDY_INT;
509
510 /*
511 * This i2c write can fail (approx. 1 in 1000 writes). But it
512 * is essential that this register is correct, so retry it
513 * multiple times.
514 *
515 * Note that the i2c write does not report an error, but the readback
516 * clearly shows the wrong value.
517 */
518 do {
519 ad9389b_wr(sd, 0x94, irqs);
520 irqs_rd = ad9389b_rd(sd, 0x94);
521 } while (retries-- && irqs_rd != irqs);
522
523 if (irqs_rd != irqs)
524 v4l2_err(sd, "Could not set interrupts: hw failure?\n");
525 }
526
527 /* Interrupt handler */
ad9389b_isr(struct v4l2_subdev * sd,u32 status,bool * handled)528 static int ad9389b_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
529 {
530 u8 irq_status;
531
532 /* disable interrupts to prevent a race condition */
533 ad9389b_set_isr(sd, false);
534 irq_status = ad9389b_rd(sd, 0x96);
535 /* clear detected interrupts */
536 ad9389b_wr(sd, 0x96, irq_status);
537 /* enable interrupts */
538 ad9389b_set_isr(sd, true);
539
540 v4l2_dbg(1, debug, sd, "%s: irq_status 0x%x\n", __func__, irq_status);
541
542 if (irq_status & (MASK_AD9389B_HPD_INT))
543 ad9389b_check_monitor_present_status(sd);
544 if (irq_status & MASK_AD9389B_EDID_RDY_INT)
545 ad9389b_check_edid_status(sd);
546
547 *handled = true;
548 return 0;
549 }
550
551 static const struct v4l2_subdev_core_ops ad9389b_core_ops = {
552 .log_status = ad9389b_log_status,
553 #ifdef CONFIG_VIDEO_ADV_DEBUG
554 .g_register = ad9389b_g_register,
555 .s_register = ad9389b_s_register,
556 #endif
557 .s_power = ad9389b_s_power,
558 .interrupt_service_routine = ad9389b_isr,
559 };
560
561 /* ------------------------------ VIDEO OPS ------------------------------ */
562
563 /* Enable/disable ad9389b output */
ad9389b_s_stream(struct v4l2_subdev * sd,int enable)564 static int ad9389b_s_stream(struct v4l2_subdev *sd, int enable)
565 {
566 v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
567
568 ad9389b_wr_and_or(sd, 0xa1, ~0x3c, (enable ? 0 : 0x3c));
569 if (enable) {
570 ad9389b_check_monitor_present_status(sd);
571 } else {
572 ad9389b_s_power(sd, 0);
573 }
574 return 0;
575 }
576
577 static const struct v4l2_dv_timings_cap ad9389b_timings_cap = {
578 .type = V4L2_DV_BT_656_1120,
579 /* keep this initialization for compatibility with GCC < 4.4.6 */
580 .reserved = { 0 },
581 V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000,
582 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
583 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
584 V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
585 V4L2_DV_BT_CAP_CUSTOM)
586 };
587
ad9389b_s_dv_timings(struct v4l2_subdev * sd,struct v4l2_dv_timings * timings)588 static int ad9389b_s_dv_timings(struct v4l2_subdev *sd,
589 struct v4l2_dv_timings *timings)
590 {
591 struct ad9389b_state *state = get_ad9389b_state(sd);
592
593 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
594
595 /* quick sanity check */
596 if (!v4l2_valid_dv_timings(timings, &ad9389b_timings_cap, NULL, NULL))
597 return -EINVAL;
598
599 /* Fill the optional fields .standards and .flags in struct v4l2_dv_timings
600 if the format is one of the CEA or DMT timings. */
601 v4l2_find_dv_timings_cap(timings, &ad9389b_timings_cap, 0, NULL, NULL);
602
603 timings->bt.flags &= ~V4L2_DV_FL_REDUCED_FPS;
604
605 /* save timings */
606 state->dv_timings = *timings;
607
608 /* update quantization range based on new dv_timings */
609 ad9389b_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
610
611 /* update PLL gear based on new dv_timings */
612 if (state->pdata.tmds_pll_gear == AD9389B_TMDS_PLL_GEAR_SEMI_AUTOMATIC)
613 ad9389b_set_manual_pll_gear(sd, (u32)timings->bt.pixelclock);
614
615 /* update AVI infoframe */
616 ad9389b_set_IT_content_AVI_InfoFrame(sd);
617
618 return 0;
619 }
620
ad9389b_g_dv_timings(struct v4l2_subdev * sd,struct v4l2_dv_timings * timings)621 static int ad9389b_g_dv_timings(struct v4l2_subdev *sd,
622 struct v4l2_dv_timings *timings)
623 {
624 struct ad9389b_state *state = get_ad9389b_state(sd);
625
626 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
627
628 if (!timings)
629 return -EINVAL;
630
631 *timings = state->dv_timings;
632
633 return 0;
634 }
635
ad9389b_enum_dv_timings(struct v4l2_subdev * sd,struct v4l2_enum_dv_timings * timings)636 static int ad9389b_enum_dv_timings(struct v4l2_subdev *sd,
637 struct v4l2_enum_dv_timings *timings)
638 {
639 if (timings->pad != 0)
640 return -EINVAL;
641
642 return v4l2_enum_dv_timings_cap(timings, &ad9389b_timings_cap,
643 NULL, NULL);
644 }
645
ad9389b_dv_timings_cap(struct v4l2_subdev * sd,struct v4l2_dv_timings_cap * cap)646 static int ad9389b_dv_timings_cap(struct v4l2_subdev *sd,
647 struct v4l2_dv_timings_cap *cap)
648 {
649 if (cap->pad != 0)
650 return -EINVAL;
651
652 *cap = ad9389b_timings_cap;
653 return 0;
654 }
655
656 static const struct v4l2_subdev_video_ops ad9389b_video_ops = {
657 .s_stream = ad9389b_s_stream,
658 .s_dv_timings = ad9389b_s_dv_timings,
659 .g_dv_timings = ad9389b_g_dv_timings,
660 };
661
662 /* ------------------------------ PAD OPS ------------------------------ */
663
ad9389b_get_edid(struct v4l2_subdev * sd,struct v4l2_edid * edid)664 static int ad9389b_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
665 {
666 struct ad9389b_state *state = get_ad9389b_state(sd);
667
668 if (edid->pad != 0)
669 return -EINVAL;
670 if (edid->blocks == 0 || edid->blocks > 256)
671 return -EINVAL;
672 if (!state->edid.segments) {
673 v4l2_dbg(1, debug, sd, "EDID segment 0 not found\n");
674 return -ENODATA;
675 }
676 if (edid->start_block >= state->edid.segments * 2)
677 return -E2BIG;
678 if (edid->blocks + edid->start_block >= state->edid.segments * 2)
679 edid->blocks = state->edid.segments * 2 - edid->start_block;
680 memcpy(edid->edid, &state->edid.data[edid->start_block * 128],
681 128 * edid->blocks);
682 return 0;
683 }
684
685 static const struct v4l2_subdev_pad_ops ad9389b_pad_ops = {
686 .get_edid = ad9389b_get_edid,
687 .enum_dv_timings = ad9389b_enum_dv_timings,
688 .dv_timings_cap = ad9389b_dv_timings_cap,
689 };
690
691 /* ------------------------------ AUDIO OPS ------------------------------ */
692
ad9389b_s_audio_stream(struct v4l2_subdev * sd,int enable)693 static int ad9389b_s_audio_stream(struct v4l2_subdev *sd, int enable)
694 {
695 v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
696
697 if (enable)
698 ad9389b_wr_and_or(sd, 0x45, 0x3f, 0x80);
699 else
700 ad9389b_wr_and_or(sd, 0x45, 0x3f, 0x40);
701
702 return 0;
703 }
704
ad9389b_s_clock_freq(struct v4l2_subdev * sd,u32 freq)705 static int ad9389b_s_clock_freq(struct v4l2_subdev *sd, u32 freq)
706 {
707 u32 N;
708
709 switch (freq) {
710 case 32000: N = 4096; break;
711 case 44100: N = 6272; break;
712 case 48000: N = 6144; break;
713 case 88200: N = 12544; break;
714 case 96000: N = 12288; break;
715 case 176400: N = 25088; break;
716 case 192000: N = 24576; break;
717 default:
718 return -EINVAL;
719 }
720
721 /* Set N (used with CTS to regenerate the audio clock) */
722 ad9389b_wr(sd, 0x01, (N >> 16) & 0xf);
723 ad9389b_wr(sd, 0x02, (N >> 8) & 0xff);
724 ad9389b_wr(sd, 0x03, N & 0xff);
725
726 return 0;
727 }
728
ad9389b_s_i2s_clock_freq(struct v4l2_subdev * sd,u32 freq)729 static int ad9389b_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq)
730 {
731 u32 i2s_sf;
732
733 switch (freq) {
734 case 32000: i2s_sf = 0x30; break;
735 case 44100: i2s_sf = 0x00; break;
736 case 48000: i2s_sf = 0x20; break;
737 case 88200: i2s_sf = 0x80; break;
738 case 96000: i2s_sf = 0xa0; break;
739 case 176400: i2s_sf = 0xc0; break;
740 case 192000: i2s_sf = 0xe0; break;
741 default:
742 return -EINVAL;
743 }
744
745 /* Set sampling frequency for I2S audio to 48 kHz */
746 ad9389b_wr_and_or(sd, 0x15, 0xf, i2s_sf);
747
748 return 0;
749 }
750
ad9389b_s_routing(struct v4l2_subdev * sd,u32 input,u32 output,u32 config)751 static int ad9389b_s_routing(struct v4l2_subdev *sd, u32 input, u32 output, u32 config)
752 {
753 /* TODO based on input/output/config */
754 /* TODO See datasheet "Programmers guide" p. 39-40 */
755
756 /* Only 2 channels in use for application */
757 ad9389b_wr_and_or(sd, 0x50, 0x1f, 0x20);
758 /* Speaker mapping */
759 ad9389b_wr(sd, 0x51, 0x00);
760
761 /* TODO Where should this be placed? */
762 /* 16 bit audio word length */
763 ad9389b_wr_and_or(sd, 0x14, 0xf0, 0x02);
764
765 return 0;
766 }
767
768 static const struct v4l2_subdev_audio_ops ad9389b_audio_ops = {
769 .s_stream = ad9389b_s_audio_stream,
770 .s_clock_freq = ad9389b_s_clock_freq,
771 .s_i2s_clock_freq = ad9389b_s_i2s_clock_freq,
772 .s_routing = ad9389b_s_routing,
773 };
774
775 /* --------------------- SUBDEV OPS --------------------------------------- */
776
777 static const struct v4l2_subdev_ops ad9389b_ops = {
778 .core = &ad9389b_core_ops,
779 .video = &ad9389b_video_ops,
780 .audio = &ad9389b_audio_ops,
781 .pad = &ad9389b_pad_ops,
782 };
783
784 /* ----------------------------------------------------------------------- */
ad9389b_dbg_dump_edid(int lvl,int debug,struct v4l2_subdev * sd,int segment,u8 * buf)785 static void ad9389b_dbg_dump_edid(int lvl, int debug, struct v4l2_subdev *sd,
786 int segment, u8 *buf)
787 {
788 int i, j;
789
790 if (debug < lvl)
791 return;
792
793 v4l2_dbg(lvl, debug, sd, "edid segment %d\n", segment);
794 for (i = 0; i < 256; i += 16) {
795 u8 b[128];
796 u8 *bp = b;
797
798 if (i == 128)
799 v4l2_dbg(lvl, debug, sd, "\n");
800 for (j = i; j < i + 16; j++) {
801 sprintf(bp, "0x%02x, ", buf[j]);
802 bp += 6;
803 }
804 bp[0] = '\0';
805 v4l2_dbg(lvl, debug, sd, "%s\n", b);
806 }
807 }
808
ad9389b_edid_handler(struct work_struct * work)809 static void ad9389b_edid_handler(struct work_struct *work)
810 {
811 struct delayed_work *dwork = to_delayed_work(work);
812 struct ad9389b_state *state =
813 container_of(dwork, struct ad9389b_state, edid_handler);
814 struct v4l2_subdev *sd = &state->sd;
815 struct ad9389b_edid_detect ed;
816
817 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
818
819 if (ad9389b_check_edid_status(sd)) {
820 /* Return if we received the EDID. */
821 return;
822 }
823
824 if (ad9389b_have_hotplug(sd)) {
825 /* We must retry reading the EDID several times, it is possible
826 * that initially the EDID couldn't be read due to i2c errors
827 * (DVI connectors are particularly prone to this problem). */
828 if (state->edid.read_retries) {
829 state->edid.read_retries--;
830 v4l2_dbg(1, debug, sd, "%s: edid read failed\n", __func__);
831 ad9389b_s_power(sd, false);
832 ad9389b_s_power(sd, true);
833 schedule_delayed_work(&state->edid_handler, EDID_DELAY);
834 return;
835 }
836 }
837
838 /* We failed to read the EDID, so send an event for this. */
839 ed.present = false;
840 ed.segment = ad9389b_rd(sd, 0xc4);
841 v4l2_subdev_notify(sd, AD9389B_EDID_DETECT, (void *)&ed);
842 v4l2_dbg(1, debug, sd, "%s: no edid found\n", __func__);
843 }
844
ad9389b_audio_setup(struct v4l2_subdev * sd)845 static void ad9389b_audio_setup(struct v4l2_subdev *sd)
846 {
847 v4l2_dbg(1, debug, sd, "%s\n", __func__);
848
849 ad9389b_s_i2s_clock_freq(sd, 48000);
850 ad9389b_s_clock_freq(sd, 48000);
851 ad9389b_s_routing(sd, 0, 0, 0);
852 }
853
854 /* Initial setup of AD9389b */
855
856 /* Configure hdmi transmitter. */
ad9389b_setup(struct v4l2_subdev * sd)857 static void ad9389b_setup(struct v4l2_subdev *sd)
858 {
859 struct ad9389b_state *state = get_ad9389b_state(sd);
860
861 v4l2_dbg(1, debug, sd, "%s\n", __func__);
862
863 /* Input format: RGB 4:4:4 */
864 ad9389b_wr_and_or(sd, 0x15, 0xf1, 0x0);
865 /* Output format: RGB 4:4:4 */
866 ad9389b_wr_and_or(sd, 0x16, 0x3f, 0x0);
867 /* 1st order interpolation 4:2:2 -> 4:4:4 up conversion,
868 Aspect ratio: 16:9 */
869 ad9389b_wr_and_or(sd, 0x17, 0xf9, 0x06);
870 /* Output format: RGB 4:4:4, Active Format Information is valid. */
871 ad9389b_wr_and_or(sd, 0x45, 0xc7, 0x08);
872 /* Underscanned */
873 ad9389b_wr_and_or(sd, 0x46, 0x3f, 0x80);
874 /* Setup video format */
875 ad9389b_wr(sd, 0x3c, 0x0);
876 /* Active format aspect ratio: same as picure. */
877 ad9389b_wr(sd, 0x47, 0x80);
878 /* No encryption */
879 ad9389b_wr_and_or(sd, 0xaf, 0xef, 0x0);
880 /* Positive clk edge capture for input video clock */
881 ad9389b_wr_and_or(sd, 0xba, 0x1f, 0x60);
882
883 ad9389b_audio_setup(sd);
884
885 v4l2_ctrl_handler_setup(&state->hdl);
886
887 ad9389b_set_IT_content_AVI_InfoFrame(sd);
888 }
889
ad9389b_notify_monitor_detect(struct v4l2_subdev * sd)890 static void ad9389b_notify_monitor_detect(struct v4l2_subdev *sd)
891 {
892 struct ad9389b_monitor_detect mdt;
893 struct ad9389b_state *state = get_ad9389b_state(sd);
894
895 mdt.present = state->have_monitor;
896 v4l2_subdev_notify(sd, AD9389B_MONITOR_DETECT, (void *)&mdt);
897 }
898
ad9389b_update_monitor_present_status(struct v4l2_subdev * sd)899 static void ad9389b_update_monitor_present_status(struct v4l2_subdev *sd)
900 {
901 struct ad9389b_state *state = get_ad9389b_state(sd);
902 /* read hotplug and rx-sense state */
903 u8 status = ad9389b_rd(sd, 0x42);
904
905 v4l2_dbg(1, debug, sd, "%s: status: 0x%x%s%s\n",
906 __func__,
907 status,
908 status & MASK_AD9389B_HPD_DETECT ? ", hotplug" : "",
909 status & MASK_AD9389B_MSEN_DETECT ? ", rx-sense" : "");
910
911 if (status & MASK_AD9389B_HPD_DETECT) {
912 v4l2_dbg(1, debug, sd, "%s: hotplug detected\n", __func__);
913 state->have_monitor = true;
914 if (!ad9389b_s_power(sd, true)) {
915 v4l2_dbg(1, debug, sd,
916 "%s: monitor detected, powerup failed\n", __func__);
917 return;
918 }
919 ad9389b_setup(sd);
920 ad9389b_notify_monitor_detect(sd);
921 state->edid.read_retries = EDID_MAX_RETRIES;
922 schedule_delayed_work(&state->edid_handler, EDID_DELAY);
923 } else if (!(status & MASK_AD9389B_HPD_DETECT)) {
924 v4l2_dbg(1, debug, sd, "%s: hotplug not detected\n", __func__);
925 state->have_monitor = false;
926 ad9389b_notify_monitor_detect(sd);
927 ad9389b_s_power(sd, false);
928 memset(&state->edid, 0, sizeof(struct ad9389b_state_edid));
929 }
930
931 /* update read only ctrls */
932 v4l2_ctrl_s_ctrl(state->hotplug_ctrl, ad9389b_have_hotplug(sd) ? 0x1 : 0x0);
933 v4l2_ctrl_s_ctrl(state->rx_sense_ctrl, ad9389b_have_rx_sense(sd) ? 0x1 : 0x0);
934 v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, state->edid.segments ? 0x1 : 0x0);
935
936 /* update with setting from ctrls */
937 ad9389b_s_ctrl(state->rgb_quantization_range_ctrl);
938 ad9389b_s_ctrl(state->hdmi_mode_ctrl);
939 }
940
ad9389b_check_monitor_present_status(struct v4l2_subdev * sd)941 static void ad9389b_check_monitor_present_status(struct v4l2_subdev *sd)
942 {
943 struct ad9389b_state *state = get_ad9389b_state(sd);
944 int retry = 0;
945
946 ad9389b_update_monitor_present_status(sd);
947
948 /*
949 * Rapid toggling of the hotplug may leave the chip powered off,
950 * even if we think it is on. In that case reset and power up again.
951 */
952 while (state->power_on && (ad9389b_rd(sd, 0x41) & 0x40)) {
953 if (++retry > 5) {
954 v4l2_err(sd, "retried %d times, give up\n", retry);
955 return;
956 }
957 v4l2_dbg(1, debug, sd, "%s: reset and re-check status (%d)\n", __func__, retry);
958 ad9389b_notify_monitor_detect(sd);
959 cancel_delayed_work_sync(&state->edid_handler);
960 memset(&state->edid, 0, sizeof(struct ad9389b_state_edid));
961 ad9389b_s_power(sd, false);
962 ad9389b_update_monitor_present_status(sd);
963 }
964 }
965
edid_block_verify_crc(u8 * edid_block)966 static bool edid_block_verify_crc(u8 *edid_block)
967 {
968 u8 sum = 0;
969 int i;
970
971 for (i = 0; i < 128; i++)
972 sum += edid_block[i];
973 return sum == 0;
974 }
975
edid_verify_crc(struct v4l2_subdev * sd,u32 segment)976 static bool edid_verify_crc(struct v4l2_subdev *sd, u32 segment)
977 {
978 struct ad9389b_state *state = get_ad9389b_state(sd);
979 u32 blocks = state->edid.blocks;
980 u8 *data = state->edid.data;
981
982 if (edid_block_verify_crc(&data[segment * 256])) {
983 if ((segment + 1) * 2 <= blocks)
984 return edid_block_verify_crc(&data[segment * 256 + 128]);
985 return true;
986 }
987 return false;
988 }
989
edid_verify_header(struct v4l2_subdev * sd,u32 segment)990 static bool edid_verify_header(struct v4l2_subdev *sd, u32 segment)
991 {
992 static const u8 hdmi_header[] = {
993 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
994 };
995 struct ad9389b_state *state = get_ad9389b_state(sd);
996 u8 *data = state->edid.data;
997 int i;
998
999 if (segment)
1000 return true;
1001
1002 for (i = 0; i < ARRAY_SIZE(hdmi_header); i++)
1003 if (data[i] != hdmi_header[i])
1004 return false;
1005
1006 return true;
1007 }
1008
ad9389b_check_edid_status(struct v4l2_subdev * sd)1009 static bool ad9389b_check_edid_status(struct v4l2_subdev *sd)
1010 {
1011 struct ad9389b_state *state = get_ad9389b_state(sd);
1012 struct ad9389b_edid_detect ed;
1013 int segment;
1014 u8 edidRdy = ad9389b_rd(sd, 0xc5);
1015
1016 v4l2_dbg(1, debug, sd, "%s: edid ready (retries: %d)\n",
1017 __func__, EDID_MAX_RETRIES - state->edid.read_retries);
1018
1019 if (!(edidRdy & MASK_AD9389B_EDID_RDY))
1020 return false;
1021
1022 segment = ad9389b_rd(sd, 0xc4);
1023 if (segment >= EDID_MAX_SEGM) {
1024 v4l2_err(sd, "edid segment number too big\n");
1025 return false;
1026 }
1027 v4l2_dbg(1, debug, sd, "%s: got segment %d\n", __func__, segment);
1028 ad9389b_edid_rd(sd, 256, &state->edid.data[segment * 256]);
1029 ad9389b_dbg_dump_edid(2, debug, sd, segment,
1030 &state->edid.data[segment * 256]);
1031 if (segment == 0) {
1032 state->edid.blocks = state->edid.data[0x7e] + 1;
1033 v4l2_dbg(1, debug, sd, "%s: %d blocks in total\n",
1034 __func__, state->edid.blocks);
1035 }
1036 if (!edid_verify_crc(sd, segment) ||
1037 !edid_verify_header(sd, segment)) {
1038 /* edid crc error, force reread of edid segment */
1039 v4l2_err(sd, "%s: edid crc or header error\n", __func__);
1040 ad9389b_s_power(sd, false);
1041 ad9389b_s_power(sd, true);
1042 return false;
1043 }
1044 /* one more segment read ok */
1045 state->edid.segments = segment + 1;
1046 if (((state->edid.data[0x7e] >> 1) + 1) > state->edid.segments) {
1047 /* Request next EDID segment */
1048 v4l2_dbg(1, debug, sd, "%s: request segment %d\n",
1049 __func__, state->edid.segments);
1050 ad9389b_wr(sd, 0xc9, 0xf);
1051 ad9389b_wr(sd, 0xc4, state->edid.segments);
1052 state->edid.read_retries = EDID_MAX_RETRIES;
1053 schedule_delayed_work(&state->edid_handler, EDID_DELAY);
1054 return false;
1055 }
1056
1057 /* report when we have all segments but report only for segment 0 */
1058 ed.present = true;
1059 ed.segment = 0;
1060 v4l2_subdev_notify(sd, AD9389B_EDID_DETECT, (void *)&ed);
1061 state->edid_detect_counter++;
1062 v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, state->edid.segments ? 0x1 : 0x0);
1063 return ed.present;
1064 }
1065
1066 /* ----------------------------------------------------------------------- */
1067
ad9389b_init_setup(struct v4l2_subdev * sd)1068 static void ad9389b_init_setup(struct v4l2_subdev *sd)
1069 {
1070 struct ad9389b_state *state = get_ad9389b_state(sd);
1071 struct ad9389b_state_edid *edid = &state->edid;
1072
1073 v4l2_dbg(1, debug, sd, "%s\n", __func__);
1074
1075 /* clear all interrupts */
1076 ad9389b_wr(sd, 0x96, 0xff);
1077
1078 memset(edid, 0, sizeof(struct ad9389b_state_edid));
1079 state->have_monitor = false;
1080 ad9389b_set_isr(sd, false);
1081 }
1082
ad9389b_probe(struct i2c_client * client,const struct i2c_device_id * id)1083 static int ad9389b_probe(struct i2c_client *client, const struct i2c_device_id *id)
1084 {
1085 const struct v4l2_dv_timings dv1080p60 = V4L2_DV_BT_CEA_1920X1080P60;
1086 struct ad9389b_state *state;
1087 struct ad9389b_platform_data *pdata = client->dev.platform_data;
1088 struct v4l2_ctrl_handler *hdl;
1089 struct v4l2_subdev *sd;
1090 int err = -EIO;
1091
1092 /* Check if the adapter supports the needed features */
1093 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1094 return -EIO;
1095
1096 v4l_dbg(1, debug, client, "detecting ad9389b client on address 0x%x\n",
1097 client->addr << 1);
1098
1099 state = devm_kzalloc(&client->dev, sizeof(*state), GFP_KERNEL);
1100 if (!state)
1101 return -ENOMEM;
1102
1103 /* Platform data */
1104 if (pdata == NULL) {
1105 v4l_err(client, "No platform data!\n");
1106 return -ENODEV;
1107 }
1108 memcpy(&state->pdata, pdata, sizeof(state->pdata));
1109
1110 sd = &state->sd;
1111 v4l2_i2c_subdev_init(sd, client, &ad9389b_ops);
1112 sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
1113
1114 hdl = &state->hdl;
1115 v4l2_ctrl_handler_init(hdl, 5);
1116
1117 state->hdmi_mode_ctrl = v4l2_ctrl_new_std_menu(hdl, &ad9389b_ctrl_ops,
1118 V4L2_CID_DV_TX_MODE, V4L2_DV_TX_MODE_HDMI,
1119 0, V4L2_DV_TX_MODE_DVI_D);
1120 state->hotplug_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1121 V4L2_CID_DV_TX_HOTPLUG, 0, 1, 0, 0);
1122 state->rx_sense_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1123 V4L2_CID_DV_TX_RXSENSE, 0, 1, 0, 0);
1124 state->have_edid0_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1125 V4L2_CID_DV_TX_EDID_PRESENT, 0, 1, 0, 0);
1126 state->rgb_quantization_range_ctrl =
1127 v4l2_ctrl_new_std_menu(hdl, &ad9389b_ctrl_ops,
1128 V4L2_CID_DV_TX_RGB_RANGE, V4L2_DV_RGB_RANGE_FULL,
1129 0, V4L2_DV_RGB_RANGE_AUTO);
1130 sd->ctrl_handler = hdl;
1131 if (hdl->error) {
1132 err = hdl->error;
1133
1134 goto err_hdl;
1135 }
1136 state->pad.flags = MEDIA_PAD_FL_SINK;
1137 sd->entity.function = MEDIA_ENT_F_DV_ENCODER;
1138 err = media_entity_pads_init(&sd->entity, 1, &state->pad);
1139 if (err)
1140 goto err_hdl;
1141
1142 state->chip_revision = ad9389b_rd(sd, 0x0);
1143 if (state->chip_revision != 2) {
1144 v4l2_err(sd, "chip_revision %d != 2\n", state->chip_revision);
1145 err = -EIO;
1146 goto err_entity;
1147 }
1148 v4l2_dbg(1, debug, sd, "reg 0x41 0x%x, chip version (reg 0x00) 0x%x\n",
1149 ad9389b_rd(sd, 0x41), state->chip_revision);
1150
1151 state->edid_i2c_client = i2c_new_dummy(client->adapter, (0x7e>>1));
1152 if (state->edid_i2c_client == NULL) {
1153 v4l2_err(sd, "failed to register edid i2c client\n");
1154 err = -ENOMEM;
1155 goto err_entity;
1156 }
1157
1158 INIT_DELAYED_WORK(&state->edid_handler, ad9389b_edid_handler);
1159 state->dv_timings = dv1080p60;
1160
1161 ad9389b_init_setup(sd);
1162 ad9389b_set_isr(sd, true);
1163
1164 v4l2_info(sd, "%s found @ 0x%x (%s)\n", client->name,
1165 client->addr << 1, client->adapter->name);
1166 return 0;
1167
1168 err_entity:
1169 media_entity_cleanup(&sd->entity);
1170 err_hdl:
1171 v4l2_ctrl_handler_free(&state->hdl);
1172 return err;
1173 }
1174
1175 /* ----------------------------------------------------------------------- */
1176
ad9389b_remove(struct i2c_client * client)1177 static int ad9389b_remove(struct i2c_client *client)
1178 {
1179 struct v4l2_subdev *sd = i2c_get_clientdata(client);
1180 struct ad9389b_state *state = get_ad9389b_state(sd);
1181
1182 state->chip_revision = -1;
1183
1184 v4l2_dbg(1, debug, sd, "%s removed @ 0x%x (%s)\n", client->name,
1185 client->addr << 1, client->adapter->name);
1186
1187 ad9389b_s_stream(sd, false);
1188 ad9389b_s_audio_stream(sd, false);
1189 ad9389b_init_setup(sd);
1190 cancel_delayed_work_sync(&state->edid_handler);
1191 i2c_unregister_device(state->edid_i2c_client);
1192 v4l2_device_unregister_subdev(sd);
1193 media_entity_cleanup(&sd->entity);
1194 v4l2_ctrl_handler_free(sd->ctrl_handler);
1195 return 0;
1196 }
1197
1198 /* ----------------------------------------------------------------------- */
1199
1200 static const struct i2c_device_id ad9389b_id[] = {
1201 { "ad9389b", 0 },
1202 { "ad9889b", 0 },
1203 { }
1204 };
1205 MODULE_DEVICE_TABLE(i2c, ad9389b_id);
1206
1207 static struct i2c_driver ad9389b_driver = {
1208 .driver = {
1209 .name = "ad9389b",
1210 },
1211 .probe = ad9389b_probe,
1212 .remove = ad9389b_remove,
1213 .id_table = ad9389b_id,
1214 };
1215
1216 module_i2c_driver(ad9389b_driver);
1217