1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#include <linux/kernel.h>
22#include <linux/module.h>
23#include <linux/slab.h>
24#include <linux/i2c.h>
25#include <linux/delay.h>
26#include <linux/videodev2.h>
27#include <linux/gpio.h>
28#include <linux/workqueue.h>
29#include <linux/hdmi.h>
30#include <linux/v4l2-dv-timings.h>
31#include <media/v4l2-device.h>
32#include <media/v4l2-common.h>
33#include <media/v4l2-ctrls.h>
34#include <media/v4l2-dv-timings.h>
35#include <media/i2c/adv7511.h>
36#include <media/cec.h>
37
38static int debug;
39module_param(debug, int, 0644);
40MODULE_PARM_DESC(debug, "debug level (0-2)");
41
42MODULE_DESCRIPTION("Analog Devices ADV7511 HDMI Transmitter Device Driver");
43MODULE_AUTHOR("Hans Verkuil");
44MODULE_LICENSE("GPL v2");
45
46#define MASK_ADV7511_EDID_RDY_INT 0x04
47#define MASK_ADV7511_MSEN_INT 0x40
48#define MASK_ADV7511_HPD_INT 0x80
49
50#define MASK_ADV7511_HPD_DETECT 0x40
51#define MASK_ADV7511_MSEN_DETECT 0x20
52#define MASK_ADV7511_EDID_RDY 0x10
53
54#define EDID_MAX_RETRIES (8)
55#define EDID_DELAY 250
56#define EDID_MAX_SEGM 8
57
58#define ADV7511_MAX_WIDTH 1920
59#define ADV7511_MAX_HEIGHT 1200
60#define ADV7511_MIN_PIXELCLOCK 20000000
61#define ADV7511_MAX_PIXELCLOCK 225000000
62
63#define ADV7511_MAX_ADDRS (3)
64
65
66
67
68
69
70
71
72
73struct i2c_reg_value {
74 unsigned char reg;
75 unsigned char value;
76};
77
78struct adv7511_state_edid {
79
80 u32 blocks;
81
82 u32 segments;
83 u8 data[EDID_MAX_SEGM * 256];
84
85 unsigned read_retries;
86 bool complete;
87};
88
89struct adv7511_state {
90 struct adv7511_platform_data pdata;
91 struct v4l2_subdev sd;
92 struct media_pad pad;
93 struct v4l2_ctrl_handler hdl;
94 int chip_revision;
95 u8 i2c_edid_addr;
96 u8 i2c_pktmem_addr;
97 u8 i2c_cec_addr;
98
99 struct i2c_client *i2c_cec;
100 struct cec_adapter *cec_adap;
101 u8 cec_addr[ADV7511_MAX_ADDRS];
102 u8 cec_valid_addrs;
103 bool cec_enabled_adap;
104
105
106 bool power_on;
107
108 bool have_monitor;
109 bool enabled_irq;
110
111 struct v4l2_dv_timings dv_timings;
112 u32 fmt_code;
113 u32 colorspace;
114 u32 ycbcr_enc;
115 u32 quantization;
116 u32 xfer_func;
117 u32 content_type;
118
119 struct v4l2_ctrl *hdmi_mode_ctrl;
120 struct v4l2_ctrl *hotplug_ctrl;
121 struct v4l2_ctrl *rx_sense_ctrl;
122 struct v4l2_ctrl *have_edid0_ctrl;
123 struct v4l2_ctrl *rgb_quantization_range_ctrl;
124 struct v4l2_ctrl *content_type_ctrl;
125 struct i2c_client *i2c_edid;
126 struct i2c_client *i2c_pktmem;
127 struct adv7511_state_edid edid;
128
129 unsigned edid_detect_counter;
130 struct workqueue_struct *work_queue;
131 struct delayed_work edid_handler;
132};
133
134static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd);
135static bool adv7511_check_edid_status(struct v4l2_subdev *sd);
136static void adv7511_setup(struct v4l2_subdev *sd);
137static int adv7511_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq);
138static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq);
139
140
141static const struct v4l2_dv_timings_cap adv7511_timings_cap = {
142 .type = V4L2_DV_BT_656_1120,
143
144 .reserved = { 0 },
145 V4L2_INIT_BT_TIMINGS(0, ADV7511_MAX_WIDTH, 0, ADV7511_MAX_HEIGHT,
146 ADV7511_MIN_PIXELCLOCK, ADV7511_MAX_PIXELCLOCK,
147 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
148 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
149 V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
150 V4L2_DV_BT_CAP_CUSTOM)
151};
152
153static inline struct adv7511_state *get_adv7511_state(struct v4l2_subdev *sd)
154{
155 return container_of(sd, struct adv7511_state, sd);
156}
157
158static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl)
159{
160 return &container_of(ctrl->handler, struct adv7511_state, hdl)->sd;
161}
162
163
164
165static s32 adv_smbus_read_byte_data_check(struct i2c_client *client,
166 u8 command, bool check)
167{
168 union i2c_smbus_data data;
169
170 if (!i2c_smbus_xfer(client->adapter, client->addr, client->flags,
171 I2C_SMBUS_READ, command,
172 I2C_SMBUS_BYTE_DATA, &data))
173 return data.byte;
174 if (check)
175 v4l_err(client, "error reading %02x, %02x\n",
176 client->addr, command);
177 return -1;
178}
179
180static s32 adv_smbus_read_byte_data(struct i2c_client *client, u8 command)
181{
182 int i;
183 for (i = 0; i < 3; i++) {
184 int ret = adv_smbus_read_byte_data_check(client, command, true);
185 if (ret >= 0) {
186 if (i)
187 v4l_err(client, "read ok after %d retries\n", i);
188 return ret;
189 }
190 }
191 v4l_err(client, "read failed\n");
192 return -1;
193}
194
195static int adv7511_rd(struct v4l2_subdev *sd, u8 reg)
196{
197 struct i2c_client *client = v4l2_get_subdevdata(sd);
198
199 return adv_smbus_read_byte_data(client, reg);
200}
201
202static int adv7511_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
203{
204 struct i2c_client *client = v4l2_get_subdevdata(sd);
205 int ret;
206 int i;
207
208 for (i = 0; i < 3; i++) {
209 ret = i2c_smbus_write_byte_data(client, reg, val);
210 if (ret == 0)
211 return 0;
212 }
213 v4l2_err(sd, "%s: i2c write error\n", __func__);
214 return ret;
215}
216
217
218
219static inline void adv7511_wr_and_or(struct v4l2_subdev *sd, u8 reg, u8 clr_mask, u8 val_mask)
220{
221 adv7511_wr(sd, reg, (adv7511_rd(sd, reg) & clr_mask) | val_mask);
222}
223
224static int adv_smbus_read_i2c_block_data(struct i2c_client *client,
225 u8 command, unsigned length, u8 *values)
226{
227 union i2c_smbus_data data;
228 int ret;
229
230 if (length > I2C_SMBUS_BLOCK_MAX)
231 length = I2C_SMBUS_BLOCK_MAX;
232 data.block[0] = length;
233
234 ret = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
235 I2C_SMBUS_READ, command,
236 I2C_SMBUS_I2C_BLOCK_DATA, &data);
237 memcpy(values, data.block + 1, length);
238 return ret;
239}
240
241static void adv7511_edid_rd(struct v4l2_subdev *sd, uint16_t len, uint8_t *buf)
242{
243 struct adv7511_state *state = get_adv7511_state(sd);
244 int i;
245 int err = 0;
246
247 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
248
249 for (i = 0; !err && i < len; i += I2C_SMBUS_BLOCK_MAX)
250 err = adv_smbus_read_i2c_block_data(state->i2c_edid, i,
251 I2C_SMBUS_BLOCK_MAX, buf + i);
252 if (err)
253 v4l2_err(sd, "%s: i2c read error\n", __func__);
254}
255
256static inline int adv7511_cec_read(struct v4l2_subdev *sd, u8 reg)
257{
258 struct adv7511_state *state = get_adv7511_state(sd);
259
260 return i2c_smbus_read_byte_data(state->i2c_cec, reg);
261}
262
263static int adv7511_cec_write(struct v4l2_subdev *sd, u8 reg, u8 val)
264{
265 struct adv7511_state *state = get_adv7511_state(sd);
266 int ret;
267 int i;
268
269 for (i = 0; i < 3; i++) {
270 ret = i2c_smbus_write_byte_data(state->i2c_cec, reg, val);
271 if (ret == 0)
272 return 0;
273 }
274 v4l2_err(sd, "%s: I2C Write Problem\n", __func__);
275 return ret;
276}
277
278static inline int adv7511_cec_write_and_or(struct v4l2_subdev *sd, u8 reg, u8 mask,
279 u8 val)
280{
281 return adv7511_cec_write(sd, reg, (adv7511_cec_read(sd, reg) & mask) | val);
282}
283
284static int adv7511_pktmem_rd(struct v4l2_subdev *sd, u8 reg)
285{
286 struct adv7511_state *state = get_adv7511_state(sd);
287
288 return adv_smbus_read_byte_data(state->i2c_pktmem, reg);
289}
290
291static int adv7511_pktmem_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
292{
293 struct adv7511_state *state = get_adv7511_state(sd);
294 int ret;
295 int i;
296
297 for (i = 0; i < 3; i++) {
298 ret = i2c_smbus_write_byte_data(state->i2c_pktmem, reg, val);
299 if (ret == 0)
300 return 0;
301 }
302 v4l2_err(sd, "%s: i2c write error\n", __func__);
303 return ret;
304}
305
306
307
308static inline void adv7511_pktmem_wr_and_or(struct v4l2_subdev *sd, u8 reg, u8 clr_mask, u8 val_mask)
309{
310 adv7511_pktmem_wr(sd, reg, (adv7511_pktmem_rd(sd, reg) & clr_mask) | val_mask);
311}
312
313static inline bool adv7511_have_hotplug(struct v4l2_subdev *sd)
314{
315 return adv7511_rd(sd, 0x42) & MASK_ADV7511_HPD_DETECT;
316}
317
318static inline bool adv7511_have_rx_sense(struct v4l2_subdev *sd)
319{
320 return adv7511_rd(sd, 0x42) & MASK_ADV7511_MSEN_DETECT;
321}
322
323static void adv7511_csc_conversion_mode(struct v4l2_subdev *sd, u8 mode)
324{
325 adv7511_wr_and_or(sd, 0x18, 0x9f, (mode & 0x3)<<5);
326}
327
328static void adv7511_csc_coeff(struct v4l2_subdev *sd,
329 u16 A1, u16 A2, u16 A3, u16 A4,
330 u16 B1, u16 B2, u16 B3, u16 B4,
331 u16 C1, u16 C2, u16 C3, u16 C4)
332{
333
334 adv7511_wr_and_or(sd, 0x18, 0xe0, A1>>8);
335 adv7511_wr(sd, 0x19, A1);
336 adv7511_wr_and_or(sd, 0x1A, 0xe0, A2>>8);
337 adv7511_wr(sd, 0x1B, A2);
338 adv7511_wr_and_or(sd, 0x1c, 0xe0, A3>>8);
339 adv7511_wr(sd, 0x1d, A3);
340 adv7511_wr_and_or(sd, 0x1e, 0xe0, A4>>8);
341 adv7511_wr(sd, 0x1f, A4);
342
343
344 adv7511_wr_and_or(sd, 0x20, 0xe0, B1>>8);
345 adv7511_wr(sd, 0x21, B1);
346 adv7511_wr_and_or(sd, 0x22, 0xe0, B2>>8);
347 adv7511_wr(sd, 0x23, B2);
348 adv7511_wr_and_or(sd, 0x24, 0xe0, B3>>8);
349 adv7511_wr(sd, 0x25, B3);
350 adv7511_wr_and_or(sd, 0x26, 0xe0, B4>>8);
351 adv7511_wr(sd, 0x27, B4);
352
353
354 adv7511_wr_and_or(sd, 0x28, 0xe0, C1>>8);
355 adv7511_wr(sd, 0x29, C1);
356 adv7511_wr_and_or(sd, 0x2A, 0xe0, C2>>8);
357 adv7511_wr(sd, 0x2B, C2);
358 adv7511_wr_and_or(sd, 0x2C, 0xe0, C3>>8);
359 adv7511_wr(sd, 0x2D, C3);
360 adv7511_wr_and_or(sd, 0x2E, 0xe0, C4>>8);
361 adv7511_wr(sd, 0x2F, C4);
362}
363
364static void adv7511_csc_rgb_full2limit(struct v4l2_subdev *sd, bool enable)
365{
366 if (enable) {
367 u8 csc_mode = 0;
368 adv7511_csc_conversion_mode(sd, csc_mode);
369 adv7511_csc_coeff(sd,
370 4096-564, 0, 0, 256,
371 0, 4096-564, 0, 256,
372 0, 0, 4096-564, 256);
373
374 adv7511_wr_and_or(sd, 0x18, 0x7f, 0x80);
375
376 adv7511_wr_and_or(sd, 0x57, 0xf3, 0x04);
377 } else {
378
379 adv7511_wr_and_or(sd, 0x18, 0x7f, 0x0);
380
381 adv7511_wr_and_or(sd, 0x57, 0xf3, 0x08);
382 }
383}
384
385static void adv7511_set_rgb_quantization_mode(struct v4l2_subdev *sd, struct v4l2_ctrl *ctrl)
386{
387 struct adv7511_state *state = get_adv7511_state(sd);
388
389
390 if (state->fmt_code != MEDIA_BUS_FMT_RGB888_1X24) {
391
392 adv7511_csc_rgb_full2limit(sd, false);
393 return;
394 }
395
396 switch (ctrl->val) {
397 case V4L2_DV_RGB_RANGE_AUTO:
398
399 if (state->dv_timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO) {
400
401 adv7511_csc_rgb_full2limit(sd, true);
402 } else {
403
404 adv7511_csc_rgb_full2limit(sd, false);
405 }
406 break;
407 case V4L2_DV_RGB_RANGE_LIMITED:
408
409 adv7511_csc_rgb_full2limit(sd, true);
410 break;
411 case V4L2_DV_RGB_RANGE_FULL:
412
413 adv7511_csc_rgb_full2limit(sd, false);
414 break;
415 }
416}
417
418
419
420static int adv7511_s_ctrl(struct v4l2_ctrl *ctrl)
421{
422 struct v4l2_subdev *sd = to_sd(ctrl);
423 struct adv7511_state *state = get_adv7511_state(sd);
424
425 v4l2_dbg(1, debug, sd, "%s: ctrl id: %d, ctrl->val %d\n", __func__, ctrl->id, ctrl->val);
426
427 if (state->hdmi_mode_ctrl == ctrl) {
428
429 adv7511_wr_and_or(sd, 0xaf, 0xfd, ctrl->val == V4L2_DV_TX_MODE_HDMI ? 0x02 : 0x00);
430 return 0;
431 }
432 if (state->rgb_quantization_range_ctrl == ctrl) {
433 adv7511_set_rgb_quantization_mode(sd, ctrl);
434 return 0;
435 }
436 if (state->content_type_ctrl == ctrl) {
437 u8 itc, cn;
438
439 state->content_type = ctrl->val;
440 itc = state->content_type != V4L2_DV_IT_CONTENT_TYPE_NO_ITC;
441 cn = itc ? state->content_type : V4L2_DV_IT_CONTENT_TYPE_GRAPHICS;
442 adv7511_wr_and_or(sd, 0x57, 0x7f, itc << 7);
443 adv7511_wr_and_or(sd, 0x59, 0xcf, cn << 4);
444 return 0;
445 }
446
447 return -EINVAL;
448}
449
450static const struct v4l2_ctrl_ops adv7511_ctrl_ops = {
451 .s_ctrl = adv7511_s_ctrl,
452};
453
454
455
456#ifdef CONFIG_VIDEO_ADV_DEBUG
457static void adv7511_inv_register(struct v4l2_subdev *sd)
458{
459 struct adv7511_state *state = get_adv7511_state(sd);
460
461 v4l2_info(sd, "0x000-0x0ff: Main Map\n");
462 if (state->i2c_cec)
463 v4l2_info(sd, "0x100-0x1ff: CEC Map\n");
464}
465
466static int adv7511_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
467{
468 struct adv7511_state *state = get_adv7511_state(sd);
469
470 reg->size = 1;
471 switch (reg->reg >> 8) {
472 case 0:
473 reg->val = adv7511_rd(sd, reg->reg & 0xff);
474 break;
475 case 1:
476 if (state->i2c_cec) {
477 reg->val = adv7511_cec_read(sd, reg->reg & 0xff);
478 break;
479 }
480
481 default:
482 v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
483 adv7511_inv_register(sd);
484 break;
485 }
486 return 0;
487}
488
489static int adv7511_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
490{
491 struct adv7511_state *state = get_adv7511_state(sd);
492
493 switch (reg->reg >> 8) {
494 case 0:
495 adv7511_wr(sd, reg->reg & 0xff, reg->val & 0xff);
496 break;
497 case 1:
498 if (state->i2c_cec) {
499 adv7511_cec_write(sd, reg->reg & 0xff, reg->val & 0xff);
500 break;
501 }
502
503 default:
504 v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
505 adv7511_inv_register(sd);
506 break;
507 }
508 return 0;
509}
510#endif
511
512struct adv7511_cfg_read_infoframe {
513 const char *desc;
514 u8 present_reg;
515 u8 present_mask;
516 u8 header[3];
517 u16 payload_addr;
518};
519
520static u8 hdmi_infoframe_checksum(u8 *ptr, size_t size)
521{
522 u8 csum = 0;
523 size_t i;
524
525
526 for (i = 0; i < size; i++)
527 csum += ptr[i];
528
529 return 256 - csum;
530}
531
532static void log_infoframe(struct v4l2_subdev *sd, const struct adv7511_cfg_read_infoframe *cri)
533{
534 struct i2c_client *client = v4l2_get_subdevdata(sd);
535 struct device *dev = &client->dev;
536 union hdmi_infoframe frame;
537 u8 buffer[32];
538 u8 len;
539 int i;
540
541 if (!(adv7511_rd(sd, cri->present_reg) & cri->present_mask)) {
542 v4l2_info(sd, "%s infoframe not transmitted\n", cri->desc);
543 return;
544 }
545
546 memcpy(buffer, cri->header, sizeof(cri->header));
547
548 len = buffer[2];
549
550 if (len + 4 > sizeof(buffer)) {
551 v4l2_err(sd, "%s: invalid %s infoframe length %d\n", __func__, cri->desc, len);
552 return;
553 }
554
555 if (cri->payload_addr >= 0x100) {
556 for (i = 0; i < len; i++)
557 buffer[i + 4] = adv7511_pktmem_rd(sd, cri->payload_addr + i - 0x100);
558 } else {
559 for (i = 0; i < len; i++)
560 buffer[i + 4] = adv7511_rd(sd, cri->payload_addr + i);
561 }
562 buffer[3] = 0;
563 buffer[3] = hdmi_infoframe_checksum(buffer, len + 4);
564
565 if (hdmi_infoframe_unpack(&frame, buffer) < 0) {
566 v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__, cri->desc);
567 return;
568 }
569
570 hdmi_infoframe_log(KERN_INFO, dev, &frame);
571}
572
573static void adv7511_log_infoframes(struct v4l2_subdev *sd)
574{
575 static const struct adv7511_cfg_read_infoframe cri[] = {
576 { "AVI", 0x44, 0x10, { 0x82, 2, 13 }, 0x55 },
577 { "Audio", 0x44, 0x08, { 0x84, 1, 10 }, 0x73 },
578 { "SDP", 0x40, 0x40, { 0x83, 1, 25 }, 0x103 },
579 };
580 int i;
581
582 for (i = 0; i < ARRAY_SIZE(cri); i++)
583 log_infoframe(sd, &cri[i]);
584}
585
586static int adv7511_log_status(struct v4l2_subdev *sd)
587{
588 struct adv7511_state *state = get_adv7511_state(sd);
589 struct adv7511_state_edid *edid = &state->edid;
590 int i;
591
592 static const char * const states[] = {
593 "in reset",
594 "reading EDID",
595 "idle",
596 "initializing HDCP",
597 "HDCP enabled",
598 "initializing HDCP repeater",
599 "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"
600 };
601 static const char * const errors[] = {
602 "no error",
603 "bad receiver BKSV",
604 "Ri mismatch",
605 "Pj mismatch",
606 "i2c error",
607 "timed out",
608 "max repeater cascade exceeded",
609 "hash check failed",
610 "too many devices",
611 "9", "A", "B", "C", "D", "E", "F"
612 };
613
614 v4l2_info(sd, "power %s\n", state->power_on ? "on" : "off");
615 v4l2_info(sd, "%s hotplug, %s Rx Sense, %s EDID (%d block(s))\n",
616 (adv7511_rd(sd, 0x42) & MASK_ADV7511_HPD_DETECT) ? "detected" : "no",
617 (adv7511_rd(sd, 0x42) & MASK_ADV7511_MSEN_DETECT) ? "detected" : "no",
618 edid->segments ? "found" : "no",
619 edid->blocks);
620 v4l2_info(sd, "%s output %s\n",
621 (adv7511_rd(sd, 0xaf) & 0x02) ?
622 "HDMI" : "DVI-D",
623 (adv7511_rd(sd, 0xa1) & 0x3c) ?
624 "disabled" : "enabled");
625 v4l2_info(sd, "state: %s, error: %s, detect count: %u, msk/irq: %02x/%02x\n",
626 states[adv7511_rd(sd, 0xc8) & 0xf],
627 errors[adv7511_rd(sd, 0xc8) >> 4], state->edid_detect_counter,
628 adv7511_rd(sd, 0x94), adv7511_rd(sd, 0x96));
629 v4l2_info(sd, "RGB quantization: %s range\n", adv7511_rd(sd, 0x18) & 0x80 ? "limited" : "full");
630 if (adv7511_rd(sd, 0xaf) & 0x02) {
631
632 u8 manual_cts = adv7511_rd(sd, 0x0a) & 0x80;
633 u32 N = (adv7511_rd(sd, 0x01) & 0xf) << 16 |
634 adv7511_rd(sd, 0x02) << 8 |
635 adv7511_rd(sd, 0x03);
636 u8 vic_detect = adv7511_rd(sd, 0x3e) >> 2;
637 u8 vic_sent = adv7511_rd(sd, 0x3d) & 0x3f;
638 u32 CTS;
639
640 if (manual_cts)
641 CTS = (adv7511_rd(sd, 0x07) & 0xf) << 16 |
642 adv7511_rd(sd, 0x08) << 8 |
643 adv7511_rd(sd, 0x09);
644 else
645 CTS = (adv7511_rd(sd, 0x04) & 0xf) << 16 |
646 adv7511_rd(sd, 0x05) << 8 |
647 adv7511_rd(sd, 0x06);
648 v4l2_info(sd, "CTS %s mode: N %d, CTS %d\n",
649 manual_cts ? "manual" : "automatic", N, CTS);
650 v4l2_info(sd, "VIC: detected %d, sent %d\n",
651 vic_detect, vic_sent);
652 adv7511_log_infoframes(sd);
653 }
654 if (state->dv_timings.type == V4L2_DV_BT_656_1120)
655 v4l2_print_dv_timings(sd->name, "timings: ",
656 &state->dv_timings, false);
657 else
658 v4l2_info(sd, "no timings set\n");
659 v4l2_info(sd, "i2c edid addr: 0x%x\n", state->i2c_edid_addr);
660
661 if (state->i2c_cec == NULL)
662 return 0;
663
664 v4l2_info(sd, "i2c cec addr: 0x%x\n", state->i2c_cec_addr);
665
666 v4l2_info(sd, "CEC: %s\n", state->cec_enabled_adap ?
667 "enabled" : "disabled");
668 if (state->cec_enabled_adap) {
669 for (i = 0; i < ADV7511_MAX_ADDRS; i++) {
670 bool is_valid = state->cec_valid_addrs & (1 << i);
671
672 if (is_valid)
673 v4l2_info(sd, "CEC Logical Address: 0x%x\n",
674 state->cec_addr[i]);
675 }
676 }
677 v4l2_info(sd, "i2c pktmem addr: 0x%x\n", state->i2c_pktmem_addr);
678 return 0;
679}
680
681
682static int adv7511_s_power(struct v4l2_subdev *sd, int on)
683{
684 struct adv7511_state *state = get_adv7511_state(sd);
685 const int retries = 20;
686 int i;
687
688 v4l2_dbg(1, debug, sd, "%s: power %s\n", __func__, on ? "on" : "off");
689
690 state->power_on = on;
691
692 if (!on) {
693
694 adv7511_wr_and_or(sd, 0x41, 0xbf, 0x40);
695 return true;
696 }
697
698
699
700
701 for (i = 0; i < retries; i++) {
702 adv7511_wr_and_or(sd, 0x41, 0xbf, 0x0);
703 if ((adv7511_rd(sd, 0x41) & 0x40) == 0)
704 break;
705 adv7511_wr_and_or(sd, 0x41, 0xbf, 0x40);
706 msleep(10);
707 }
708 if (i == retries) {
709 v4l2_dbg(1, debug, sd, "%s: failed to powerup the adv7511!\n", __func__);
710 adv7511_s_power(sd, 0);
711 return false;
712 }
713 if (i > 1)
714 v4l2_dbg(1, debug, sd, "%s: needed %d retries to powerup the adv7511\n", __func__, i);
715
716
717 adv7511_wr(sd, 0x98, 0x03);
718 adv7511_wr_and_or(sd, 0x9a, 0xfe, 0x70);
719 adv7511_wr(sd, 0x9c, 0x30);
720 adv7511_wr_and_or(sd, 0x9d, 0xfc, 0x01);
721 adv7511_wr(sd, 0xa2, 0xa4);
722 adv7511_wr(sd, 0xa3, 0xa4);
723 adv7511_wr(sd, 0xe0, 0xd0);
724 adv7511_wr(sd, 0xf9, 0x00);
725
726 adv7511_wr(sd, 0x43, state->i2c_edid_addr);
727 adv7511_wr(sd, 0x45, state->i2c_pktmem_addr);
728
729
730 adv7511_wr(sd, 0xc9, 0xf);
731 return true;
732}
733
734#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
735static int adv7511_cec_adap_enable(struct cec_adapter *adap, bool enable)
736{
737 struct adv7511_state *state = adap->priv;
738 struct v4l2_subdev *sd = &state->sd;
739
740 if (state->i2c_cec == NULL)
741 return -EIO;
742
743 if (!state->cec_enabled_adap && enable) {
744
745 adv7511_cec_write_and_or(sd, 0x4e, 0xfc, 0x01);
746
747 adv7511_cec_write(sd, 0x4a, 0x07);
748 adv7511_cec_write(sd, 0x4a, 0);
749 adv7511_cec_write_and_or(sd, 0x11, 0xfe, 0);
750
751
752
753
754
755 if (state->enabled_irq)
756 adv7511_wr_and_or(sd, 0x95, 0xc0, 0x39);
757 } else if (state->cec_enabled_adap && !enable) {
758 if (state->enabled_irq)
759 adv7511_wr_and_or(sd, 0x95, 0xc0, 0x00);
760
761 adv7511_cec_write_and_or(sd, 0x4b, 0x8f, 0x00);
762
763 adv7511_cec_write_and_or(sd, 0x4e, 0xfc, 0x00);
764 state->cec_valid_addrs = 0;
765 }
766 state->cec_enabled_adap = enable;
767 return 0;
768}
769
770static int adv7511_cec_adap_log_addr(struct cec_adapter *adap, u8 addr)
771{
772 struct adv7511_state *state = adap->priv;
773 struct v4l2_subdev *sd = &state->sd;
774 unsigned int i, free_idx = ADV7511_MAX_ADDRS;
775
776 if (!state->cec_enabled_adap)
777 return addr == CEC_LOG_ADDR_INVALID ? 0 : -EIO;
778
779 if (addr == CEC_LOG_ADDR_INVALID) {
780 adv7511_cec_write_and_or(sd, 0x4b, 0x8f, 0);
781 state->cec_valid_addrs = 0;
782 return 0;
783 }
784
785 for (i = 0; i < ADV7511_MAX_ADDRS; i++) {
786 bool is_valid = state->cec_valid_addrs & (1 << i);
787
788 if (free_idx == ADV7511_MAX_ADDRS && !is_valid)
789 free_idx = i;
790 if (is_valid && state->cec_addr[i] == addr)
791 return 0;
792 }
793 if (i == ADV7511_MAX_ADDRS) {
794 i = free_idx;
795 if (i == ADV7511_MAX_ADDRS)
796 return -ENXIO;
797 }
798 state->cec_addr[i] = addr;
799 state->cec_valid_addrs |= 1 << i;
800
801 switch (i) {
802 case 0:
803
804 adv7511_cec_write_and_or(sd, 0x4b, 0xef, 0x10);
805
806 adv7511_cec_write_and_or(sd, 0x4c, 0xf0, addr);
807 break;
808 case 1:
809
810 adv7511_cec_write_and_or(sd, 0x4b, 0xdf, 0x20);
811
812 adv7511_cec_write_and_or(sd, 0x4c, 0x0f, addr << 4);
813 break;
814 case 2:
815
816 adv7511_cec_write_and_or(sd, 0x4b, 0xbf, 0x40);
817
818 adv7511_cec_write_and_or(sd, 0x4d, 0xf0, addr);
819 break;
820 }
821 return 0;
822}
823
824static int adv7511_cec_adap_transmit(struct cec_adapter *adap, u8 attempts,
825 u32 signal_free_time, struct cec_msg *msg)
826{
827 struct adv7511_state *state = adap->priv;
828 struct v4l2_subdev *sd = &state->sd;
829 u8 len = msg->len;
830 unsigned int i;
831
832 v4l2_dbg(1, debug, sd, "%s: len %d\n", __func__, len);
833
834 if (len > 16) {
835 v4l2_err(sd, "%s: len exceeded 16 (%d)\n", __func__, len);
836 return -EINVAL;
837 }
838
839
840
841
842
843
844 adv7511_cec_write_and_or(sd, 0x12, ~0x70, max(1, attempts - 1) << 4);
845
846
847 adv7511_wr_and_or(sd, 0x97, 0xc7, 0x38);
848
849
850 for (i = 0; i < len; i++)
851 adv7511_cec_write(sd, i, msg->msg[i]);
852
853
854 adv7511_cec_write(sd, 0x10, len);
855
856 adv7511_cec_write(sd, 0x11, 0x01);
857 return 0;
858}
859
860static void adv_cec_tx_raw_status(struct v4l2_subdev *sd, u8 tx_raw_status)
861{
862 struct adv7511_state *state = get_adv7511_state(sd);
863
864 if ((adv7511_cec_read(sd, 0x11) & 0x01) == 0) {
865 v4l2_dbg(1, debug, sd, "%s: tx raw: tx disabled\n", __func__);
866 return;
867 }
868
869 if (tx_raw_status & 0x10) {
870 v4l2_dbg(1, debug, sd,
871 "%s: tx raw: arbitration lost\n", __func__);
872 cec_transmit_done(state->cec_adap, CEC_TX_STATUS_ARB_LOST,
873 1, 0, 0, 0);
874 return;
875 }
876 if (tx_raw_status & 0x08) {
877 u8 status;
878 u8 nack_cnt;
879 u8 low_drive_cnt;
880
881 v4l2_dbg(1, debug, sd, "%s: tx raw: retry failed\n", __func__);
882
883
884
885
886 status = CEC_TX_STATUS_MAX_RETRIES;
887 nack_cnt = adv7511_cec_read(sd, 0x14) & 0xf;
888 if (nack_cnt)
889 status |= CEC_TX_STATUS_NACK;
890 low_drive_cnt = adv7511_cec_read(sd, 0x14) >> 4;
891 if (low_drive_cnt)
892 status |= CEC_TX_STATUS_LOW_DRIVE;
893 cec_transmit_done(state->cec_adap, status,
894 0, nack_cnt, low_drive_cnt, 0);
895 return;
896 }
897 if (tx_raw_status & 0x20) {
898 v4l2_dbg(1, debug, sd, "%s: tx raw: ready ok\n", __func__);
899 cec_transmit_done(state->cec_adap, CEC_TX_STATUS_OK, 0, 0, 0, 0);
900 return;
901 }
902}
903
904static const struct cec_adap_ops adv7511_cec_adap_ops = {
905 .adap_enable = adv7511_cec_adap_enable,
906 .adap_log_addr = adv7511_cec_adap_log_addr,
907 .adap_transmit = adv7511_cec_adap_transmit,
908};
909#endif
910
911
912static void adv7511_set_isr(struct v4l2_subdev *sd, bool enable)
913{
914 struct adv7511_state *state = get_adv7511_state(sd);
915 u8 irqs = MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT;
916 u8 irqs_rd;
917 int retries = 100;
918
919 v4l2_dbg(2, debug, sd, "%s: %s\n", __func__, enable ? "enable" : "disable");
920
921 if (state->enabled_irq == enable)
922 return;
923 state->enabled_irq = enable;
924
925
926
927 if (!enable)
928 irqs = 0;
929 else if (adv7511_have_hotplug(sd))
930 irqs |= MASK_ADV7511_EDID_RDY_INT;
931
932 adv7511_wr_and_or(sd, 0x95, 0xc0,
933 (state->cec_enabled_adap && enable) ? 0x39 : 0x00);
934
935
936
937
938
939
940
941
942
943 do {
944 adv7511_wr(sd, 0x94, irqs);
945 irqs_rd = adv7511_rd(sd, 0x94);
946 } while (retries-- && irqs_rd != irqs);
947
948 if (irqs_rd == irqs)
949 return;
950 v4l2_err(sd, "Could not set interrupts: hw failure?\n");
951}
952
953
954static int adv7511_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
955{
956 u8 irq_status;
957 u8 cec_irq;
958
959
960 adv7511_set_isr(sd, false);
961 irq_status = adv7511_rd(sd, 0x96);
962 cec_irq = adv7511_rd(sd, 0x97);
963
964 adv7511_wr(sd, 0x96, irq_status);
965 adv7511_wr(sd, 0x97, cec_irq);
966
967 v4l2_dbg(1, debug, sd, "%s: irq 0x%x, cec-irq 0x%x\n", __func__,
968 irq_status, cec_irq);
969
970 if (irq_status & (MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT))
971 adv7511_check_monitor_present_status(sd);
972 if (irq_status & MASK_ADV7511_EDID_RDY_INT)
973 adv7511_check_edid_status(sd);
974
975#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
976 if (cec_irq & 0x38)
977 adv_cec_tx_raw_status(sd, cec_irq);
978
979 if (cec_irq & 1) {
980 struct adv7511_state *state = get_adv7511_state(sd);
981 struct cec_msg msg;
982
983 msg.len = adv7511_cec_read(sd, 0x25) & 0x1f;
984
985 v4l2_dbg(1, debug, sd, "%s: cec msg len %d\n", __func__,
986 msg.len);
987
988 if (msg.len > 16)
989 msg.len = 16;
990
991 if (msg.len) {
992 u8 i;
993
994 for (i = 0; i < msg.len; i++)
995 msg.msg[i] = adv7511_cec_read(sd, i + 0x15);
996
997 adv7511_cec_write(sd, 0x4a, 1);
998 adv7511_cec_write(sd, 0x4a, 0);
999 cec_received_msg(state->cec_adap, &msg);
1000 }
1001 }
1002#endif
1003
1004
1005 adv7511_set_isr(sd, true);
1006
1007 if (handled)
1008 *handled = true;
1009 return 0;
1010}
1011
1012static const struct v4l2_subdev_core_ops adv7511_core_ops = {
1013 .log_status = adv7511_log_status,
1014#ifdef CONFIG_VIDEO_ADV_DEBUG
1015 .g_register = adv7511_g_register,
1016 .s_register = adv7511_s_register,
1017#endif
1018 .s_power = adv7511_s_power,
1019 .interrupt_service_routine = adv7511_isr,
1020};
1021
1022
1023
1024
1025static int adv7511_s_stream(struct v4l2_subdev *sd, int enable)
1026{
1027 struct adv7511_state *state = get_adv7511_state(sd);
1028
1029 v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
1030 adv7511_wr_and_or(sd, 0xa1, ~0x3c, (enable ? 0 : 0x3c));
1031 if (enable) {
1032 adv7511_check_monitor_present_status(sd);
1033 } else {
1034 adv7511_s_power(sd, 0);
1035 state->have_monitor = false;
1036 }
1037 return 0;
1038}
1039
1040static int adv7511_s_dv_timings(struct v4l2_subdev *sd,
1041 struct v4l2_dv_timings *timings)
1042{
1043 struct adv7511_state *state = get_adv7511_state(sd);
1044 struct v4l2_bt_timings *bt = &timings->bt;
1045 u32 fps;
1046
1047 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
1048
1049
1050 if (!v4l2_valid_dv_timings(timings, &adv7511_timings_cap, NULL, NULL))
1051 return -EINVAL;
1052
1053
1054
1055 v4l2_find_dv_timings_cap(timings, &adv7511_timings_cap, 0, NULL, NULL);
1056
1057
1058 state->dv_timings = *timings;
1059
1060
1061 adv7511_wr_and_or(sd, 0x17, 0x9f,
1062 ((bt->polarities & V4L2_DV_VSYNC_POS_POL) ? 0 : 0x40) |
1063 ((bt->polarities & V4L2_DV_HSYNC_POS_POL) ? 0 : 0x20));
1064
1065 fps = (u32)bt->pixelclock / (V4L2_DV_BT_FRAME_WIDTH(bt) * V4L2_DV_BT_FRAME_HEIGHT(bt));
1066 switch (fps) {
1067 case 24:
1068 adv7511_wr_and_or(sd, 0xfb, 0xf9, 1 << 1);
1069 break;
1070 case 25:
1071 adv7511_wr_and_or(sd, 0xfb, 0xf9, 2 << 1);
1072 break;
1073 case 30:
1074 adv7511_wr_and_or(sd, 0xfb, 0xf9, 3 << 1);
1075 break;
1076 default:
1077 adv7511_wr_and_or(sd, 0xfb, 0xf9, 0);
1078 break;
1079 }
1080
1081
1082 adv7511_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
1083
1084 return 0;
1085}
1086
1087static int adv7511_g_dv_timings(struct v4l2_subdev *sd,
1088 struct v4l2_dv_timings *timings)
1089{
1090 struct adv7511_state *state = get_adv7511_state(sd);
1091
1092 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
1093
1094 if (!timings)
1095 return -EINVAL;
1096
1097 *timings = state->dv_timings;
1098
1099 return 0;
1100}
1101
1102static int adv7511_enum_dv_timings(struct v4l2_subdev *sd,
1103 struct v4l2_enum_dv_timings *timings)
1104{
1105 if (timings->pad != 0)
1106 return -EINVAL;
1107
1108 return v4l2_enum_dv_timings_cap(timings, &adv7511_timings_cap, NULL, NULL);
1109}
1110
1111static int adv7511_dv_timings_cap(struct v4l2_subdev *sd,
1112 struct v4l2_dv_timings_cap *cap)
1113{
1114 if (cap->pad != 0)
1115 return -EINVAL;
1116
1117 *cap = adv7511_timings_cap;
1118 return 0;
1119}
1120
1121static const struct v4l2_subdev_video_ops adv7511_video_ops = {
1122 .s_stream = adv7511_s_stream,
1123 .s_dv_timings = adv7511_s_dv_timings,
1124 .g_dv_timings = adv7511_g_dv_timings,
1125};
1126
1127
1128static int adv7511_s_audio_stream(struct v4l2_subdev *sd, int enable)
1129{
1130 v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
1131
1132 if (enable)
1133 adv7511_wr_and_or(sd, 0x4b, 0x3f, 0x80);
1134 else
1135 adv7511_wr_and_or(sd, 0x4b, 0x3f, 0x40);
1136
1137 return 0;
1138}
1139
1140static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq)
1141{
1142 u32 N;
1143
1144 switch (freq) {
1145 case 32000: N = 4096; break;
1146 case 44100: N = 6272; break;
1147 case 48000: N = 6144; break;
1148 case 88200: N = 12544; break;
1149 case 96000: N = 12288; break;
1150 case 176400: N = 25088; break;
1151 case 192000: N = 24576; break;
1152 default:
1153 return -EINVAL;
1154 }
1155
1156
1157 adv7511_wr(sd, 0x01, (N >> 16) & 0xf);
1158 adv7511_wr(sd, 0x02, (N >> 8) & 0xff);
1159 adv7511_wr(sd, 0x03, N & 0xff);
1160
1161 return 0;
1162}
1163
1164static int adv7511_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq)
1165{
1166 u32 i2s_sf;
1167
1168 switch (freq) {
1169 case 32000: i2s_sf = 0x30; break;
1170 case 44100: i2s_sf = 0x00; break;
1171 case 48000: i2s_sf = 0x20; break;
1172 case 88200: i2s_sf = 0x80; break;
1173 case 96000: i2s_sf = 0xa0; break;
1174 case 176400: i2s_sf = 0xc0; break;
1175 case 192000: i2s_sf = 0xe0; break;
1176 default:
1177 return -EINVAL;
1178 }
1179
1180
1181 adv7511_wr_and_or(sd, 0x15, 0xf, i2s_sf);
1182
1183 return 0;
1184}
1185
1186static int adv7511_s_routing(struct v4l2_subdev *sd, u32 input, u32 output, u32 config)
1187{
1188
1189 adv7511_wr_and_or(sd, 0x73, 0xf8, 0x1);
1190
1191 adv7511_wr(sd, 0x76, 0x00);
1192
1193
1194 adv7511_wr_and_or(sd, 0x14, 0xf0, 0x02);
1195
1196 return 0;
1197}
1198
1199static const struct v4l2_subdev_audio_ops adv7511_audio_ops = {
1200 .s_stream = adv7511_s_audio_stream,
1201 .s_clock_freq = adv7511_s_clock_freq,
1202 .s_i2s_clock_freq = adv7511_s_i2s_clock_freq,
1203 .s_routing = adv7511_s_routing,
1204};
1205
1206
1207
1208static int adv7511_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
1209{
1210 struct adv7511_state *state = get_adv7511_state(sd);
1211
1212 memset(edid->reserved, 0, sizeof(edid->reserved));
1213
1214 if (edid->pad != 0)
1215 return -EINVAL;
1216
1217 if (edid->start_block == 0 && edid->blocks == 0) {
1218 edid->blocks = state->edid.segments * 2;
1219 return 0;
1220 }
1221
1222 if (state->edid.segments == 0)
1223 return -ENODATA;
1224
1225 if (edid->start_block >= state->edid.segments * 2)
1226 return -EINVAL;
1227
1228 if (edid->start_block + edid->blocks > state->edid.segments * 2)
1229 edid->blocks = state->edid.segments * 2 - edid->start_block;
1230
1231 memcpy(edid->edid, &state->edid.data[edid->start_block * 128],
1232 128 * edid->blocks);
1233
1234 return 0;
1235}
1236
1237static int adv7511_enum_mbus_code(struct v4l2_subdev *sd,
1238 struct v4l2_subdev_pad_config *cfg,
1239 struct v4l2_subdev_mbus_code_enum *code)
1240{
1241 if (code->pad != 0)
1242 return -EINVAL;
1243
1244 switch (code->index) {
1245 case 0:
1246 code->code = MEDIA_BUS_FMT_RGB888_1X24;
1247 break;
1248 case 1:
1249 code->code = MEDIA_BUS_FMT_YUYV8_1X16;
1250 break;
1251 case 2:
1252 code->code = MEDIA_BUS_FMT_UYVY8_1X16;
1253 break;
1254 default:
1255 return -EINVAL;
1256 }
1257 return 0;
1258}
1259
1260static void adv7511_fill_format(struct adv7511_state *state,
1261 struct v4l2_mbus_framefmt *format)
1262{
1263 format->width = state->dv_timings.bt.width;
1264 format->height = state->dv_timings.bt.height;
1265 format->field = V4L2_FIELD_NONE;
1266}
1267
1268static int adv7511_get_fmt(struct v4l2_subdev *sd,
1269 struct v4l2_subdev_pad_config *cfg,
1270 struct v4l2_subdev_format *format)
1271{
1272 struct adv7511_state *state = get_adv7511_state(sd);
1273
1274 if (format->pad != 0)
1275 return -EINVAL;
1276
1277 memset(&format->format, 0, sizeof(format->format));
1278 adv7511_fill_format(state, &format->format);
1279
1280 if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
1281 struct v4l2_mbus_framefmt *fmt;
1282
1283 fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
1284 format->format.code = fmt->code;
1285 format->format.colorspace = fmt->colorspace;
1286 format->format.ycbcr_enc = fmt->ycbcr_enc;
1287 format->format.quantization = fmt->quantization;
1288 format->format.xfer_func = fmt->xfer_func;
1289 } else {
1290 format->format.code = state->fmt_code;
1291 format->format.colorspace = state->colorspace;
1292 format->format.ycbcr_enc = state->ycbcr_enc;
1293 format->format.quantization = state->quantization;
1294 format->format.xfer_func = state->xfer_func;
1295 }
1296
1297 return 0;
1298}
1299
1300static int adv7511_set_fmt(struct v4l2_subdev *sd,
1301 struct v4l2_subdev_pad_config *cfg,
1302 struct v4l2_subdev_format *format)
1303{
1304 struct adv7511_state *state = get_adv7511_state(sd);
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315 u8 c = HDMI_COLORIMETRY_NONE;
1316 u8 ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1317 u8 y = HDMI_COLORSPACE_RGB;
1318 u8 q = HDMI_QUANTIZATION_RANGE_DEFAULT;
1319 u8 yq = HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
1320 u8 itc = state->content_type != V4L2_DV_IT_CONTENT_TYPE_NO_ITC;
1321 u8 cn = itc ? state->content_type : V4L2_DV_IT_CONTENT_TYPE_GRAPHICS;
1322
1323 if (format->pad != 0)
1324 return -EINVAL;
1325 switch (format->format.code) {
1326 case MEDIA_BUS_FMT_UYVY8_1X16:
1327 case MEDIA_BUS_FMT_YUYV8_1X16:
1328 case MEDIA_BUS_FMT_RGB888_1X24:
1329 break;
1330 default:
1331 return -EINVAL;
1332 }
1333
1334 adv7511_fill_format(state, &format->format);
1335 if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
1336 struct v4l2_mbus_framefmt *fmt;
1337
1338 fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
1339 fmt->code = format->format.code;
1340 fmt->colorspace = format->format.colorspace;
1341 fmt->ycbcr_enc = format->format.ycbcr_enc;
1342 fmt->quantization = format->format.quantization;
1343 fmt->xfer_func = format->format.xfer_func;
1344 return 0;
1345 }
1346
1347 switch (format->format.code) {
1348 case MEDIA_BUS_FMT_UYVY8_1X16:
1349 adv7511_wr_and_or(sd, 0x15, 0xf0, 0x01);
1350 adv7511_wr_and_or(sd, 0x16, 0x03, 0xb8);
1351 y = HDMI_COLORSPACE_YUV422;
1352 break;
1353 case MEDIA_BUS_FMT_YUYV8_1X16:
1354 adv7511_wr_and_or(sd, 0x15, 0xf0, 0x01);
1355 adv7511_wr_and_or(sd, 0x16, 0x03, 0xbc);
1356 y = HDMI_COLORSPACE_YUV422;
1357 break;
1358 case MEDIA_BUS_FMT_RGB888_1X24:
1359 default:
1360 adv7511_wr_and_or(sd, 0x15, 0xf0, 0x00);
1361 adv7511_wr_and_or(sd, 0x16, 0x03, 0x00);
1362 break;
1363 }
1364 state->fmt_code = format->format.code;
1365 state->colorspace = format->format.colorspace;
1366 state->ycbcr_enc = format->format.ycbcr_enc;
1367 state->quantization = format->format.quantization;
1368 state->xfer_func = format->format.xfer_func;
1369
1370 switch (format->format.colorspace) {
1371 case V4L2_COLORSPACE_ADOBERGB:
1372 c = HDMI_COLORIMETRY_EXTENDED;
1373 ec = y ? HDMI_EXTENDED_COLORIMETRY_ADOBE_YCC_601 :
1374 HDMI_EXTENDED_COLORIMETRY_ADOBE_RGB;
1375 break;
1376 case V4L2_COLORSPACE_SMPTE170M:
1377 c = y ? HDMI_COLORIMETRY_ITU_601 : HDMI_COLORIMETRY_NONE;
1378 if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_XV601) {
1379 c = HDMI_COLORIMETRY_EXTENDED;
1380 ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1381 }
1382 break;
1383 case V4L2_COLORSPACE_REC709:
1384 c = y ? HDMI_COLORIMETRY_ITU_709 : HDMI_COLORIMETRY_NONE;
1385 if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_XV709) {
1386 c = HDMI_COLORIMETRY_EXTENDED;
1387 ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
1388 }
1389 break;
1390 case V4L2_COLORSPACE_SRGB:
1391 c = y ? HDMI_COLORIMETRY_EXTENDED : HDMI_COLORIMETRY_NONE;
1392 ec = y ? HDMI_EXTENDED_COLORIMETRY_S_YCC_601 :
1393 HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1394 break;
1395 case V4L2_COLORSPACE_BT2020:
1396 c = HDMI_COLORIMETRY_EXTENDED;
1397 if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_BT2020_CONST_LUM)
1398 ec = 5;
1399 else
1400 ec = 6;
1401 break;
1402 default:
1403 break;
1404 }
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419 switch (format->format.quantization) {
1420 case V4L2_QUANTIZATION_FULL_RANGE:
1421 q = y ? HDMI_QUANTIZATION_RANGE_DEFAULT :
1422 HDMI_QUANTIZATION_RANGE_FULL;
1423 yq = q ? q - 1 : HDMI_YCC_QUANTIZATION_RANGE_FULL;
1424 break;
1425 case V4L2_QUANTIZATION_LIM_RANGE:
1426 q = y ? HDMI_QUANTIZATION_RANGE_DEFAULT :
1427 HDMI_QUANTIZATION_RANGE_LIMITED;
1428 yq = q ? q - 1 : HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
1429 break;
1430 }
1431
1432 adv7511_wr_and_or(sd, 0x4a, 0xbf, 0);
1433 adv7511_wr_and_or(sd, 0x55, 0x9f, y << 5);
1434 adv7511_wr_and_or(sd, 0x56, 0x3f, c << 6);
1435 adv7511_wr_and_or(sd, 0x57, 0x83, (ec << 4) | (q << 2) | (itc << 7));
1436 adv7511_wr_and_or(sd, 0x59, 0x0f, (yq << 6) | (cn << 4));
1437 adv7511_wr_and_or(sd, 0x4a, 0xff, 1);
1438 adv7511_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
1439
1440 return 0;
1441}
1442
1443static const struct v4l2_subdev_pad_ops adv7511_pad_ops = {
1444 .get_edid = adv7511_get_edid,
1445 .enum_mbus_code = adv7511_enum_mbus_code,
1446 .get_fmt = adv7511_get_fmt,
1447 .set_fmt = adv7511_set_fmt,
1448 .enum_dv_timings = adv7511_enum_dv_timings,
1449 .dv_timings_cap = adv7511_dv_timings_cap,
1450};
1451
1452
1453
1454static const struct v4l2_subdev_ops adv7511_ops = {
1455 .core = &adv7511_core_ops,
1456 .pad = &adv7511_pad_ops,
1457 .video = &adv7511_video_ops,
1458 .audio = &adv7511_audio_ops,
1459};
1460
1461
1462static void adv7511_dbg_dump_edid(int lvl, int debug, struct v4l2_subdev *sd, int segment, u8 *buf)
1463{
1464 if (debug >= lvl) {
1465 int i, j;
1466 v4l2_dbg(lvl, debug, sd, "edid segment %d\n", segment);
1467 for (i = 0; i < 256; i += 16) {
1468 u8 b[128];
1469 u8 *bp = b;
1470 if (i == 128)
1471 v4l2_dbg(lvl, debug, sd, "\n");
1472 for (j = i; j < i + 16; j++) {
1473 sprintf(bp, "0x%02x, ", buf[j]);
1474 bp += 6;
1475 }
1476 bp[0] = '\0';
1477 v4l2_dbg(lvl, debug, sd, "%s\n", b);
1478 }
1479 }
1480}
1481
1482static void adv7511_notify_no_edid(struct v4l2_subdev *sd)
1483{
1484 struct adv7511_state *state = get_adv7511_state(sd);
1485 struct adv7511_edid_detect ed;
1486
1487
1488 ed.present = false;
1489 ed.segment = adv7511_rd(sd, 0xc4);
1490 ed.phys_addr = CEC_PHYS_ADDR_INVALID;
1491 cec_s_phys_addr(state->cec_adap, ed.phys_addr, false);
1492 v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
1493 v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, 0x0);
1494}
1495
1496static void adv7511_edid_handler(struct work_struct *work)
1497{
1498 struct delayed_work *dwork = to_delayed_work(work);
1499 struct adv7511_state *state = container_of(dwork, struct adv7511_state, edid_handler);
1500 struct v4l2_subdev *sd = &state->sd;
1501
1502 v4l2_dbg(1, debug, sd, "%s:\n", __func__);
1503
1504 if (adv7511_check_edid_status(sd)) {
1505
1506 return;
1507 }
1508
1509 if (adv7511_have_hotplug(sd)) {
1510
1511
1512
1513 if (state->edid.read_retries) {
1514 state->edid.read_retries--;
1515 v4l2_dbg(1, debug, sd, "%s: edid read failed\n", __func__);
1516 state->have_monitor = false;
1517 adv7511_s_power(sd, false);
1518 adv7511_s_power(sd, true);
1519 queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
1520 return;
1521 }
1522 }
1523
1524
1525 adv7511_notify_no_edid(sd);
1526 v4l2_dbg(1, debug, sd, "%s: no edid found\n", __func__);
1527}
1528
1529static void adv7511_audio_setup(struct v4l2_subdev *sd)
1530{
1531 v4l2_dbg(1, debug, sd, "%s\n", __func__);
1532
1533 adv7511_s_i2s_clock_freq(sd, 48000);
1534 adv7511_s_clock_freq(sd, 48000);
1535 adv7511_s_routing(sd, 0, 0, 0);
1536}
1537
1538
1539static void adv7511_setup(struct v4l2_subdev *sd)
1540{
1541 struct adv7511_state *state = get_adv7511_state(sd);
1542 v4l2_dbg(1, debug, sd, "%s\n", __func__);
1543
1544
1545 adv7511_wr_and_or(sd, 0x15, 0xf0, 0x0);
1546
1547 adv7511_wr_and_or(sd, 0x16, 0x7f, 0x0);
1548
1549 adv7511_wr_and_or(sd, 0x17, 0xf9, 0x06);
1550
1551 adv7511_wr_and_or(sd, 0x3b, 0x9f, 0x0);
1552
1553 adv7511_wr_and_or(sd, 0x18, 0x7f, 0x0);
1554
1555
1556 adv7511_wr_and_or(sd, 0x55, 0x9c, 0x12);
1557
1558 adv7511_wr_and_or(sd, 0x44, 0xe7, 0x10);
1559
1560 adv7511_wr(sd, 0x56, 0xa8);
1561
1562 adv7511_wr_and_or(sd, 0xaf, 0xed, 0x0);
1563
1564
1565 adv7511_wr_and_or(sd, 0xba, 0x1f, 0x60);
1566
1567 adv7511_audio_setup(sd);
1568
1569 v4l2_ctrl_handler_setup(&state->hdl);
1570}
1571
1572static void adv7511_notify_monitor_detect(struct v4l2_subdev *sd)
1573{
1574 struct adv7511_monitor_detect mdt;
1575 struct adv7511_state *state = get_adv7511_state(sd);
1576
1577 mdt.present = state->have_monitor;
1578 v4l2_subdev_notify(sd, ADV7511_MONITOR_DETECT, (void *)&mdt);
1579}
1580
1581static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd)
1582{
1583 struct adv7511_state *state = get_adv7511_state(sd);
1584
1585 u8 status = adv7511_rd(sd, 0x42);
1586
1587 v4l2_dbg(1, debug, sd, "%s: status: 0x%x%s%s\n",
1588 __func__,
1589 status,
1590 status & MASK_ADV7511_HPD_DETECT ? ", hotplug" : "",
1591 status & MASK_ADV7511_MSEN_DETECT ? ", rx-sense" : "");
1592
1593
1594 v4l2_ctrl_s_ctrl(state->hotplug_ctrl, adv7511_have_hotplug(sd) ? 0x1 : 0x0);
1595 v4l2_ctrl_s_ctrl(state->rx_sense_ctrl, adv7511_have_rx_sense(sd) ? 0x1 : 0x0);
1596
1597 if ((status & MASK_ADV7511_HPD_DETECT) && ((status & MASK_ADV7511_MSEN_DETECT) || state->edid.segments)) {
1598 v4l2_dbg(1, debug, sd, "%s: hotplug and (rx-sense or edid)\n", __func__);
1599 if (!state->have_monitor) {
1600 v4l2_dbg(1, debug, sd, "%s: monitor detected\n", __func__);
1601 state->have_monitor = true;
1602 adv7511_set_isr(sd, true);
1603 if (!adv7511_s_power(sd, true)) {
1604 v4l2_dbg(1, debug, sd, "%s: monitor detected, powerup failed\n", __func__);
1605 return;
1606 }
1607 adv7511_setup(sd);
1608 adv7511_notify_monitor_detect(sd);
1609 state->edid.read_retries = EDID_MAX_RETRIES;
1610 queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
1611 }
1612 } else if (status & MASK_ADV7511_HPD_DETECT) {
1613 v4l2_dbg(1, debug, sd, "%s: hotplug detected\n", __func__);
1614 state->edid.read_retries = EDID_MAX_RETRIES;
1615 queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
1616 } else if (!(status & MASK_ADV7511_HPD_DETECT)) {
1617 v4l2_dbg(1, debug, sd, "%s: hotplug not detected\n", __func__);
1618 if (state->have_monitor) {
1619 v4l2_dbg(1, debug, sd, "%s: monitor not detected\n", __func__);
1620 state->have_monitor = false;
1621 adv7511_notify_monitor_detect(sd);
1622 }
1623 adv7511_s_power(sd, false);
1624 memset(&state->edid, 0, sizeof(struct adv7511_state_edid));
1625 adv7511_notify_no_edid(sd);
1626 }
1627}
1628
1629static bool edid_block_verify_crc(u8 *edid_block)
1630{
1631 u8 sum = 0;
1632 int i;
1633
1634 for (i = 0; i < 128; i++)
1635 sum += edid_block[i];
1636 return sum == 0;
1637}
1638
1639static bool edid_verify_crc(struct v4l2_subdev *sd, u32 segment)
1640{
1641 struct adv7511_state *state = get_adv7511_state(sd);
1642 u32 blocks = state->edid.blocks;
1643 u8 *data = state->edid.data;
1644
1645 if (!edid_block_verify_crc(&data[segment * 256]))
1646 return false;
1647 if ((segment + 1) * 2 <= blocks)
1648 return edid_block_verify_crc(&data[segment * 256 + 128]);
1649 return true;
1650}
1651
1652static bool edid_verify_header(struct v4l2_subdev *sd, u32 segment)
1653{
1654 static const u8 hdmi_header[] = {
1655 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
1656 };
1657 struct adv7511_state *state = get_adv7511_state(sd);
1658 u8 *data = state->edid.data;
1659
1660 if (segment != 0)
1661 return true;
1662 return !memcmp(data, hdmi_header, sizeof(hdmi_header));
1663}
1664
1665static bool adv7511_check_edid_status(struct v4l2_subdev *sd)
1666{
1667 struct adv7511_state *state = get_adv7511_state(sd);
1668 u8 edidRdy = adv7511_rd(sd, 0xc5);
1669
1670 v4l2_dbg(1, debug, sd, "%s: edid ready (retries: %d)\n",
1671 __func__, EDID_MAX_RETRIES - state->edid.read_retries);
1672
1673 if (state->edid.complete)
1674 return true;
1675
1676 if (edidRdy & MASK_ADV7511_EDID_RDY) {
1677 int segment = adv7511_rd(sd, 0xc4);
1678 struct adv7511_edid_detect ed;
1679
1680 if (segment >= EDID_MAX_SEGM) {
1681 v4l2_err(sd, "edid segment number too big\n");
1682 return false;
1683 }
1684 v4l2_dbg(1, debug, sd, "%s: got segment %d\n", __func__, segment);
1685 adv7511_edid_rd(sd, 256, &state->edid.data[segment * 256]);
1686 adv7511_dbg_dump_edid(2, debug, sd, segment, &state->edid.data[segment * 256]);
1687 if (segment == 0) {
1688 state->edid.blocks = state->edid.data[0x7e] + 1;
1689 v4l2_dbg(1, debug, sd, "%s: %d blocks in total\n", __func__, state->edid.blocks);
1690 }
1691 if (!edid_verify_crc(sd, segment) ||
1692 !edid_verify_header(sd, segment)) {
1693
1694 v4l2_err(sd, "%s: edid crc or header error\n", __func__);
1695 state->have_monitor = false;
1696 adv7511_s_power(sd, false);
1697 adv7511_s_power(sd, true);
1698 return false;
1699 }
1700
1701 state->edid.segments = segment + 1;
1702 v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, 0x1);
1703 if (((state->edid.data[0x7e] >> 1) + 1) > state->edid.segments) {
1704
1705 v4l2_dbg(1, debug, sd, "%s: request segment %d\n", __func__, state->edid.segments);
1706 adv7511_wr(sd, 0xc9, 0xf);
1707 adv7511_wr(sd, 0xc4, state->edid.segments);
1708 state->edid.read_retries = EDID_MAX_RETRIES;
1709 queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
1710 return false;
1711 }
1712
1713 v4l2_dbg(1, debug, sd, "%s: edid complete with %d segment(s)\n", __func__, state->edid.segments);
1714 state->edid.complete = true;
1715 ed.phys_addr = cec_get_edid_phys_addr(state->edid.data,
1716 state->edid.segments * 256,
1717 NULL);
1718
1719
1720
1721 ed.present = true;
1722 ed.segment = 0;
1723 state->edid_detect_counter++;
1724 cec_s_phys_addr(state->cec_adap, ed.phys_addr, false);
1725 v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
1726 return ed.present;
1727 }
1728
1729 return false;
1730}
1731
1732static int adv7511_registered(struct v4l2_subdev *sd)
1733{
1734 struct adv7511_state *state = get_adv7511_state(sd);
1735 int err;
1736
1737 err = cec_register_adapter(state->cec_adap);
1738 if (err)
1739 cec_delete_adapter(state->cec_adap);
1740 return err;
1741}
1742
1743static void adv7511_unregistered(struct v4l2_subdev *sd)
1744{
1745 struct adv7511_state *state = get_adv7511_state(sd);
1746
1747 cec_unregister_adapter(state->cec_adap);
1748}
1749
1750static const struct v4l2_subdev_internal_ops adv7511_int_ops = {
1751 .registered = adv7511_registered,
1752 .unregistered = adv7511_unregistered,
1753};
1754
1755
1756
1757static void adv7511_init_setup(struct v4l2_subdev *sd)
1758{
1759 struct adv7511_state *state = get_adv7511_state(sd);
1760 struct adv7511_state_edid *edid = &state->edid;
1761 u32 cec_clk = state->pdata.cec_clk;
1762 u8 ratio;
1763
1764 v4l2_dbg(1, debug, sd, "%s\n", __func__);
1765
1766
1767 adv7511_wr(sd, 0x96, 0xff);
1768 adv7511_wr(sd, 0x97, 0xff);
1769
1770
1771
1772
1773
1774 adv7511_wr_and_or(sd, 0xd6, 0x3f, 0xc0);
1775 memset(edid, 0, sizeof(struct adv7511_state_edid));
1776 state->have_monitor = false;
1777 adv7511_set_isr(sd, false);
1778 adv7511_s_stream(sd, false);
1779 adv7511_s_audio_stream(sd, false);
1780
1781 if (state->i2c_cec == NULL)
1782 return;
1783
1784 v4l2_dbg(1, debug, sd, "%s: cec_clk %d\n", __func__, cec_clk);
1785
1786
1787 adv7511_cec_write(sd, 0x50, 0x01);
1788 adv7511_cec_write(sd, 0x50, 0x00);
1789
1790
1791 adv7511_cec_write(sd, 0x4a, 0x00);
1792
1793 if (cec_clk % 750000 != 0)
1794 v4l2_err(sd, "%s: cec_clk %d, not multiple of 750 Khz\n",
1795 __func__, cec_clk);
1796
1797 ratio = (cec_clk / 750000) - 1;
1798 adv7511_cec_write(sd, 0x4e, ratio << 2);
1799}
1800
1801static int adv7511_probe(struct i2c_client *client, const struct i2c_device_id *id)
1802{
1803 struct adv7511_state *state;
1804 struct adv7511_platform_data *pdata = client->dev.platform_data;
1805 struct v4l2_ctrl_handler *hdl;
1806 struct v4l2_subdev *sd;
1807 u8 chip_id[2];
1808 int err = -EIO;
1809
1810
1811 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1812 return -EIO;
1813
1814 state = devm_kzalloc(&client->dev, sizeof(struct adv7511_state), GFP_KERNEL);
1815 if (!state)
1816 return -ENOMEM;
1817
1818
1819 if (!pdata) {
1820 v4l_err(client, "No platform data!\n");
1821 return -ENODEV;
1822 }
1823 memcpy(&state->pdata, pdata, sizeof(state->pdata));
1824 state->fmt_code = MEDIA_BUS_FMT_RGB888_1X24;
1825 state->colorspace = V4L2_COLORSPACE_SRGB;
1826
1827 sd = &state->sd;
1828
1829 v4l2_dbg(1, debug, sd, "detecting adv7511 client on address 0x%x\n",
1830 client->addr << 1);
1831
1832 v4l2_i2c_subdev_init(sd, client, &adv7511_ops);
1833 sd->internal_ops = &adv7511_int_ops;
1834
1835 hdl = &state->hdl;
1836 v4l2_ctrl_handler_init(hdl, 10);
1837
1838 state->hdmi_mode_ctrl = v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
1839 V4L2_CID_DV_TX_MODE, V4L2_DV_TX_MODE_HDMI,
1840 0, V4L2_DV_TX_MODE_DVI_D);
1841 state->hotplug_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1842 V4L2_CID_DV_TX_HOTPLUG, 0, 1, 0, 0);
1843 state->rx_sense_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1844 V4L2_CID_DV_TX_RXSENSE, 0, 1, 0, 0);
1845 state->have_edid0_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1846 V4L2_CID_DV_TX_EDID_PRESENT, 0, 1, 0, 0);
1847 state->rgb_quantization_range_ctrl =
1848 v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
1849 V4L2_CID_DV_TX_RGB_RANGE, V4L2_DV_RGB_RANGE_FULL,
1850 0, V4L2_DV_RGB_RANGE_AUTO);
1851 state->content_type_ctrl =
1852 v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
1853 V4L2_CID_DV_TX_IT_CONTENT_TYPE, V4L2_DV_IT_CONTENT_TYPE_NO_ITC,
1854 0, V4L2_DV_IT_CONTENT_TYPE_NO_ITC);
1855 sd->ctrl_handler = hdl;
1856 if (hdl->error) {
1857 err = hdl->error;
1858 goto err_hdl;
1859 }
1860 state->pad.flags = MEDIA_PAD_FL_SINK;
1861 err = media_entity_pads_init(&sd->entity, 1, &state->pad);
1862 if (err)
1863 goto err_hdl;
1864
1865
1866 state->i2c_edid_addr = state->pdata.i2c_edid << 1;
1867 state->i2c_cec_addr = state->pdata.i2c_cec << 1;
1868 state->i2c_pktmem_addr = state->pdata.i2c_pktmem << 1;
1869
1870 state->chip_revision = adv7511_rd(sd, 0x0);
1871 chip_id[0] = adv7511_rd(sd, 0xf5);
1872 chip_id[1] = adv7511_rd(sd, 0xf6);
1873 if (chip_id[0] != 0x75 || chip_id[1] != 0x11) {
1874 v4l2_err(sd, "chip_id != 0x7511, read 0x%02x%02x\n", chip_id[0],
1875 chip_id[1]);
1876 err = -EIO;
1877 goto err_entity;
1878 }
1879
1880 state->i2c_edid = i2c_new_dummy(client->adapter,
1881 state->i2c_edid_addr >> 1);
1882 if (state->i2c_edid == NULL) {
1883 v4l2_err(sd, "failed to register edid i2c client\n");
1884 err = -ENOMEM;
1885 goto err_entity;
1886 }
1887
1888 adv7511_wr(sd, 0xe1, state->i2c_cec_addr);
1889 if (state->pdata.cec_clk < 3000000 ||
1890 state->pdata.cec_clk > 100000000) {
1891 v4l2_err(sd, "%s: cec_clk %u outside range, disabling cec\n",
1892 __func__, state->pdata.cec_clk);
1893 state->pdata.cec_clk = 0;
1894 }
1895
1896 if (state->pdata.cec_clk) {
1897 state->i2c_cec = i2c_new_dummy(client->adapter,
1898 state->i2c_cec_addr >> 1);
1899 if (state->i2c_cec == NULL) {
1900 v4l2_err(sd, "failed to register cec i2c client\n");
1901 goto err_unreg_edid;
1902 }
1903 adv7511_wr(sd, 0xe2, 0x00);
1904 } else {
1905 adv7511_wr(sd, 0xe2, 0x01);
1906 }
1907
1908 state->i2c_pktmem = i2c_new_dummy(client->adapter, state->i2c_pktmem_addr >> 1);
1909 if (state->i2c_pktmem == NULL) {
1910 v4l2_err(sd, "failed to register pktmem i2c client\n");
1911 err = -ENOMEM;
1912 goto err_unreg_cec;
1913 }
1914
1915 state->work_queue = create_singlethread_workqueue(sd->name);
1916 if (state->work_queue == NULL) {
1917 v4l2_err(sd, "could not create workqueue\n");
1918 err = -ENOMEM;
1919 goto err_unreg_pktmem;
1920 }
1921
1922 INIT_DELAYED_WORK(&state->edid_handler, adv7511_edid_handler);
1923
1924 adv7511_init_setup(sd);
1925
1926#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
1927 state->cec_adap = cec_allocate_adapter(&adv7511_cec_adap_ops,
1928 state, dev_name(&client->dev), CEC_CAP_TRANSMIT |
1929 CEC_CAP_LOG_ADDRS | CEC_CAP_PASSTHROUGH | CEC_CAP_RC,
1930 ADV7511_MAX_ADDRS, &client->dev);
1931 err = PTR_ERR_OR_ZERO(state->cec_adap);
1932 if (err) {
1933 destroy_workqueue(state->work_queue);
1934 goto err_unreg_pktmem;
1935 }
1936#endif
1937
1938 adv7511_set_isr(sd, true);
1939 adv7511_check_monitor_present_status(sd);
1940
1941 v4l2_info(sd, "%s found @ 0x%x (%s)\n", client->name,
1942 client->addr << 1, client->adapter->name);
1943 return 0;
1944
1945err_unreg_pktmem:
1946 i2c_unregister_device(state->i2c_pktmem);
1947err_unreg_cec:
1948 if (state->i2c_cec)
1949 i2c_unregister_device(state->i2c_cec);
1950err_unreg_edid:
1951 i2c_unregister_device(state->i2c_edid);
1952err_entity:
1953 media_entity_cleanup(&sd->entity);
1954err_hdl:
1955 v4l2_ctrl_handler_free(&state->hdl);
1956 return err;
1957}
1958
1959
1960
1961static int adv7511_remove(struct i2c_client *client)
1962{
1963 struct v4l2_subdev *sd = i2c_get_clientdata(client);
1964 struct adv7511_state *state = get_adv7511_state(sd);
1965
1966 state->chip_revision = -1;
1967
1968 v4l2_dbg(1, debug, sd, "%s removed @ 0x%x (%s)\n", client->name,
1969 client->addr << 1, client->adapter->name);
1970
1971 adv7511_set_isr(sd, false);
1972 adv7511_init_setup(sd);
1973 cancel_delayed_work(&state->edid_handler);
1974 i2c_unregister_device(state->i2c_edid);
1975 if (state->i2c_cec)
1976 i2c_unregister_device(state->i2c_cec);
1977 i2c_unregister_device(state->i2c_pktmem);
1978 destroy_workqueue(state->work_queue);
1979 v4l2_device_unregister_subdev(sd);
1980 media_entity_cleanup(&sd->entity);
1981 v4l2_ctrl_handler_free(sd->ctrl_handler);
1982 return 0;
1983}
1984
1985
1986
1987static struct i2c_device_id adv7511_id[] = {
1988 { "adv7511", 0 },
1989 { }
1990};
1991MODULE_DEVICE_TABLE(i2c, adv7511_id);
1992
1993static struct i2c_driver adv7511_driver = {
1994 .driver = {
1995 .name = "adv7511",
1996 },
1997 .probe = adv7511_probe,
1998 .remove = adv7511_remove,
1999 .id_table = adv7511_id,
2000};
2001
2002module_i2c_driver(adv7511_driver);
2003