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