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