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