Merge tag 'docs-for-linus' of git://git.lwn.net/linux-2.6
[firefly-linux-kernel-4.4.55.git] / drivers / media / i2c / adv7604.c
1 /*
2  * adv7604 - Analog Devices ADV7604 video decoder driver
3  *
4  * Copyright 2012 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  */
20
21 /*
22  * References (c = chapter, p = page):
23  * REF_01 - Analog devices, ADV7604, Register Settings Recommendations,
24  *              Revision 2.5, June 2010
25  * REF_02 - Analog devices, Register map documentation, Documentation of
26  *              the register maps, Software manual, Rev. F, June 2010
27  * REF_03 - Analog devices, ADV7604, Hardware Manual, Rev. F, August 2010
28  */
29
30 #include <linux/delay.h>
31 #include <linux/gpio/consumer.h>
32 #include <linux/hdmi.h>
33 #include <linux/i2c.h>
34 #include <linux/kernel.h>
35 #include <linux/module.h>
36 #include <linux/slab.h>
37 #include <linux/v4l2-dv-timings.h>
38 #include <linux/videodev2.h>
39 #include <linux/workqueue.h>
40
41 #include <media/adv7604.h>
42 #include <media/v4l2-ctrls.h>
43 #include <media/v4l2-device.h>
44 #include <media/v4l2-dv-timings.h>
45 #include <media/v4l2-of.h>
46
47 static int debug;
48 module_param(debug, int, 0644);
49 MODULE_PARM_DESC(debug, "debug level (0-2)");
50
51 MODULE_DESCRIPTION("Analog Devices ADV7604 video decoder driver");
52 MODULE_AUTHOR("Hans Verkuil <hans.verkuil@cisco.com>");
53 MODULE_AUTHOR("Mats Randgaard <mats.randgaard@cisco.com>");
54 MODULE_LICENSE("GPL");
55
56 /* ADV7604 system clock frequency */
57 #define ADV76XX_FSC (28636360)
58
59 #define ADV76XX_RGB_OUT                                 (1 << 1)
60
61 #define ADV76XX_OP_FORMAT_SEL_8BIT                      (0 << 0)
62 #define ADV7604_OP_FORMAT_SEL_10BIT                     (1 << 0)
63 #define ADV76XX_OP_FORMAT_SEL_12BIT                     (2 << 0)
64
65 #define ADV76XX_OP_MODE_SEL_SDR_422                     (0 << 5)
66 #define ADV7604_OP_MODE_SEL_DDR_422                     (1 << 5)
67 #define ADV76XX_OP_MODE_SEL_SDR_444                     (2 << 5)
68 #define ADV7604_OP_MODE_SEL_DDR_444                     (3 << 5)
69 #define ADV76XX_OP_MODE_SEL_SDR_422_2X                  (4 << 5)
70 #define ADV7604_OP_MODE_SEL_ADI_CM                      (5 << 5)
71
72 #define ADV76XX_OP_CH_SEL_GBR                           (0 << 5)
73 #define ADV76XX_OP_CH_SEL_GRB                           (1 << 5)
74 #define ADV76XX_OP_CH_SEL_BGR                           (2 << 5)
75 #define ADV76XX_OP_CH_SEL_RGB                           (3 << 5)
76 #define ADV76XX_OP_CH_SEL_BRG                           (4 << 5)
77 #define ADV76XX_OP_CH_SEL_RBG                           (5 << 5)
78
79 #define ADV76XX_OP_SWAP_CB_CR                           (1 << 0)
80
81 enum adv76xx_type {
82         ADV7604,
83         ADV7611,
84 };
85
86 struct adv76xx_reg_seq {
87         unsigned int reg;
88         u8 val;
89 };
90
91 struct adv76xx_format_info {
92         u32 code;
93         u8 op_ch_sel;
94         bool rgb_out;
95         bool swap_cb_cr;
96         u8 op_format_sel;
97 };
98
99 struct adv76xx_cfg_read_infoframe {
100         const char *desc;
101         u8 present_mask;
102         u8 head_addr;
103         u8 payload_addr;
104 };
105
106 struct adv76xx_chip_info {
107         enum adv76xx_type type;
108
109         bool has_afe;
110         unsigned int max_port;
111         unsigned int num_dv_ports;
112
113         unsigned int edid_enable_reg;
114         unsigned int edid_status_reg;
115         unsigned int lcf_reg;
116
117         unsigned int cable_det_mask;
118         unsigned int tdms_lock_mask;
119         unsigned int fmt_change_digital_mask;
120         unsigned int cp_csc;
121
122         const struct adv76xx_format_info *formats;
123         unsigned int nformats;
124
125         void (*set_termination)(struct v4l2_subdev *sd, bool enable);
126         void (*setup_irqs)(struct v4l2_subdev *sd);
127         unsigned int (*read_hdmi_pixelclock)(struct v4l2_subdev *sd);
128         unsigned int (*read_cable_det)(struct v4l2_subdev *sd);
129
130         /* 0 = AFE, 1 = HDMI */
131         const struct adv76xx_reg_seq *recommended_settings[2];
132         unsigned int num_recommended_settings[2];
133
134         unsigned long page_mask;
135
136         /* Masks for timings */
137         unsigned int linewidth_mask;
138         unsigned int field0_height_mask;
139         unsigned int field1_height_mask;
140         unsigned int hfrontporch_mask;
141         unsigned int hsync_mask;
142         unsigned int hbackporch_mask;
143         unsigned int field0_vfrontporch_mask;
144         unsigned int field1_vfrontporch_mask;
145         unsigned int field0_vsync_mask;
146         unsigned int field1_vsync_mask;
147         unsigned int field0_vbackporch_mask;
148         unsigned int field1_vbackporch_mask;
149 };
150
151 /*
152  **********************************************************************
153  *
154  *  Arrays with configuration parameters for the ADV7604
155  *
156  **********************************************************************
157  */
158
159 struct adv76xx_state {
160         const struct adv76xx_chip_info *info;
161         struct adv76xx_platform_data pdata;
162
163         struct gpio_desc *hpd_gpio[4];
164
165         struct v4l2_subdev sd;
166         struct media_pad pads[ADV76XX_PAD_MAX];
167         unsigned int source_pad;
168
169         struct v4l2_ctrl_handler hdl;
170
171         enum adv76xx_pad selected_input;
172
173         struct v4l2_dv_timings timings;
174         const struct adv76xx_format_info *format;
175
176         struct {
177                 u8 edid[256];
178                 u32 present;
179                 unsigned blocks;
180         } edid;
181         u16 spa_port_a[2];
182         struct v4l2_fract aspect_ratio;
183         u32 rgb_quantization_range;
184         struct workqueue_struct *work_queues;
185         struct delayed_work delayed_work_enable_hotplug;
186         bool restart_stdi_once;
187
188         /* i2c clients */
189         struct i2c_client *i2c_clients[ADV76XX_PAGE_MAX];
190
191         /* controls */
192         struct v4l2_ctrl *detect_tx_5v_ctrl;
193         struct v4l2_ctrl *analog_sampling_phase_ctrl;
194         struct v4l2_ctrl *free_run_color_manual_ctrl;
195         struct v4l2_ctrl *free_run_color_ctrl;
196         struct v4l2_ctrl *rgb_quantization_range_ctrl;
197 };
198
199 static bool adv76xx_has_afe(struct adv76xx_state *state)
200 {
201         return state->info->has_afe;
202 }
203
204 /* Supported CEA and DMT timings */
205 static const struct v4l2_dv_timings adv76xx_timings[] = {
206         V4L2_DV_BT_CEA_720X480P59_94,
207         V4L2_DV_BT_CEA_720X576P50,
208         V4L2_DV_BT_CEA_1280X720P24,
209         V4L2_DV_BT_CEA_1280X720P25,
210         V4L2_DV_BT_CEA_1280X720P50,
211         V4L2_DV_BT_CEA_1280X720P60,
212         V4L2_DV_BT_CEA_1920X1080P24,
213         V4L2_DV_BT_CEA_1920X1080P25,
214         V4L2_DV_BT_CEA_1920X1080P30,
215         V4L2_DV_BT_CEA_1920X1080P50,
216         V4L2_DV_BT_CEA_1920X1080P60,
217
218         /* sorted by DMT ID */
219         V4L2_DV_BT_DMT_640X350P85,
220         V4L2_DV_BT_DMT_640X400P85,
221         V4L2_DV_BT_DMT_720X400P85,
222         V4L2_DV_BT_DMT_640X480P60,
223         V4L2_DV_BT_DMT_640X480P72,
224         V4L2_DV_BT_DMT_640X480P75,
225         V4L2_DV_BT_DMT_640X480P85,
226         V4L2_DV_BT_DMT_800X600P56,
227         V4L2_DV_BT_DMT_800X600P60,
228         V4L2_DV_BT_DMT_800X600P72,
229         V4L2_DV_BT_DMT_800X600P75,
230         V4L2_DV_BT_DMT_800X600P85,
231         V4L2_DV_BT_DMT_848X480P60,
232         V4L2_DV_BT_DMT_1024X768P60,
233         V4L2_DV_BT_DMT_1024X768P70,
234         V4L2_DV_BT_DMT_1024X768P75,
235         V4L2_DV_BT_DMT_1024X768P85,
236         V4L2_DV_BT_DMT_1152X864P75,
237         V4L2_DV_BT_DMT_1280X768P60_RB,
238         V4L2_DV_BT_DMT_1280X768P60,
239         V4L2_DV_BT_DMT_1280X768P75,
240         V4L2_DV_BT_DMT_1280X768P85,
241         V4L2_DV_BT_DMT_1280X800P60_RB,
242         V4L2_DV_BT_DMT_1280X800P60,
243         V4L2_DV_BT_DMT_1280X800P75,
244         V4L2_DV_BT_DMT_1280X800P85,
245         V4L2_DV_BT_DMT_1280X960P60,
246         V4L2_DV_BT_DMT_1280X960P85,
247         V4L2_DV_BT_DMT_1280X1024P60,
248         V4L2_DV_BT_DMT_1280X1024P75,
249         V4L2_DV_BT_DMT_1280X1024P85,
250         V4L2_DV_BT_DMT_1360X768P60,
251         V4L2_DV_BT_DMT_1400X1050P60_RB,
252         V4L2_DV_BT_DMT_1400X1050P60,
253         V4L2_DV_BT_DMT_1400X1050P75,
254         V4L2_DV_BT_DMT_1400X1050P85,
255         V4L2_DV_BT_DMT_1440X900P60_RB,
256         V4L2_DV_BT_DMT_1440X900P60,
257         V4L2_DV_BT_DMT_1600X1200P60,
258         V4L2_DV_BT_DMT_1680X1050P60_RB,
259         V4L2_DV_BT_DMT_1680X1050P60,
260         V4L2_DV_BT_DMT_1792X1344P60,
261         V4L2_DV_BT_DMT_1856X1392P60,
262         V4L2_DV_BT_DMT_1920X1200P60_RB,
263         V4L2_DV_BT_DMT_1366X768P60_RB,
264         V4L2_DV_BT_DMT_1366X768P60,
265         V4L2_DV_BT_DMT_1920X1080P60,
266         { },
267 };
268
269 struct adv76xx_video_standards {
270         struct v4l2_dv_timings timings;
271         u8 vid_std;
272         u8 v_freq;
273 };
274
275 /* sorted by number of lines */
276 static const struct adv76xx_video_standards adv7604_prim_mode_comp[] = {
277         /* { V4L2_DV_BT_CEA_720X480P59_94, 0x0a, 0x00 }, TODO flickering */
278         { V4L2_DV_BT_CEA_720X576P50, 0x0b, 0x00 },
279         { V4L2_DV_BT_CEA_1280X720P50, 0x19, 0x01 },
280         { V4L2_DV_BT_CEA_1280X720P60, 0x19, 0x00 },
281         { V4L2_DV_BT_CEA_1920X1080P24, 0x1e, 0x04 },
282         { V4L2_DV_BT_CEA_1920X1080P25, 0x1e, 0x03 },
283         { V4L2_DV_BT_CEA_1920X1080P30, 0x1e, 0x02 },
284         { V4L2_DV_BT_CEA_1920X1080P50, 0x1e, 0x01 },
285         { V4L2_DV_BT_CEA_1920X1080P60, 0x1e, 0x00 },
286         /* TODO add 1920x1080P60_RB (CVT timing) */
287         { },
288 };
289
290 /* sorted by number of lines */
291 static const struct adv76xx_video_standards adv7604_prim_mode_gr[] = {
292         { V4L2_DV_BT_DMT_640X480P60, 0x08, 0x00 },
293         { V4L2_DV_BT_DMT_640X480P72, 0x09, 0x00 },
294         { V4L2_DV_BT_DMT_640X480P75, 0x0a, 0x00 },
295         { V4L2_DV_BT_DMT_640X480P85, 0x0b, 0x00 },
296         { V4L2_DV_BT_DMT_800X600P56, 0x00, 0x00 },
297         { V4L2_DV_BT_DMT_800X600P60, 0x01, 0x00 },
298         { V4L2_DV_BT_DMT_800X600P72, 0x02, 0x00 },
299         { V4L2_DV_BT_DMT_800X600P75, 0x03, 0x00 },
300         { V4L2_DV_BT_DMT_800X600P85, 0x04, 0x00 },
301         { V4L2_DV_BT_DMT_1024X768P60, 0x0c, 0x00 },
302         { V4L2_DV_BT_DMT_1024X768P70, 0x0d, 0x00 },
303         { V4L2_DV_BT_DMT_1024X768P75, 0x0e, 0x00 },
304         { V4L2_DV_BT_DMT_1024X768P85, 0x0f, 0x00 },
305         { V4L2_DV_BT_DMT_1280X1024P60, 0x05, 0x00 },
306         { V4L2_DV_BT_DMT_1280X1024P75, 0x06, 0x00 },
307         { V4L2_DV_BT_DMT_1360X768P60, 0x12, 0x00 },
308         { V4L2_DV_BT_DMT_1366X768P60, 0x13, 0x00 },
309         { V4L2_DV_BT_DMT_1400X1050P60, 0x14, 0x00 },
310         { V4L2_DV_BT_DMT_1400X1050P75, 0x15, 0x00 },
311         { V4L2_DV_BT_DMT_1600X1200P60, 0x16, 0x00 }, /* TODO not tested */
312         /* TODO add 1600X1200P60_RB (not a DMT timing) */
313         { V4L2_DV_BT_DMT_1680X1050P60, 0x18, 0x00 },
314         { V4L2_DV_BT_DMT_1920X1200P60_RB, 0x19, 0x00 }, /* TODO not tested */
315         { },
316 };
317
318 /* sorted by number of lines */
319 static const struct adv76xx_video_standards adv76xx_prim_mode_hdmi_comp[] = {
320         { V4L2_DV_BT_CEA_720X480P59_94, 0x0a, 0x00 },
321         { V4L2_DV_BT_CEA_720X576P50, 0x0b, 0x00 },
322         { V4L2_DV_BT_CEA_1280X720P50, 0x13, 0x01 },
323         { V4L2_DV_BT_CEA_1280X720P60, 0x13, 0x00 },
324         { V4L2_DV_BT_CEA_1920X1080P24, 0x1e, 0x04 },
325         { V4L2_DV_BT_CEA_1920X1080P25, 0x1e, 0x03 },
326         { V4L2_DV_BT_CEA_1920X1080P30, 0x1e, 0x02 },
327         { V4L2_DV_BT_CEA_1920X1080P50, 0x1e, 0x01 },
328         { V4L2_DV_BT_CEA_1920X1080P60, 0x1e, 0x00 },
329         { },
330 };
331
332 /* sorted by number of lines */
333 static const struct adv76xx_video_standards adv76xx_prim_mode_hdmi_gr[] = {
334         { V4L2_DV_BT_DMT_640X480P60, 0x08, 0x00 },
335         { V4L2_DV_BT_DMT_640X480P72, 0x09, 0x00 },
336         { V4L2_DV_BT_DMT_640X480P75, 0x0a, 0x00 },
337         { V4L2_DV_BT_DMT_640X480P85, 0x0b, 0x00 },
338         { V4L2_DV_BT_DMT_800X600P56, 0x00, 0x00 },
339         { V4L2_DV_BT_DMT_800X600P60, 0x01, 0x00 },
340         { V4L2_DV_BT_DMT_800X600P72, 0x02, 0x00 },
341         { V4L2_DV_BT_DMT_800X600P75, 0x03, 0x00 },
342         { V4L2_DV_BT_DMT_800X600P85, 0x04, 0x00 },
343         { V4L2_DV_BT_DMT_1024X768P60, 0x0c, 0x00 },
344         { V4L2_DV_BT_DMT_1024X768P70, 0x0d, 0x00 },
345         { V4L2_DV_BT_DMT_1024X768P75, 0x0e, 0x00 },
346         { V4L2_DV_BT_DMT_1024X768P85, 0x0f, 0x00 },
347         { V4L2_DV_BT_DMT_1280X1024P60, 0x05, 0x00 },
348         { V4L2_DV_BT_DMT_1280X1024P75, 0x06, 0x00 },
349         { },
350 };
351
352 static const struct v4l2_event adv76xx_ev_fmt = {
353         .type = V4L2_EVENT_SOURCE_CHANGE,
354         .u.src_change.changes = V4L2_EVENT_SRC_CH_RESOLUTION,
355 };
356
357 /* ----------------------------------------------------------------------- */
358
359 static inline struct adv76xx_state *to_state(struct v4l2_subdev *sd)
360 {
361         return container_of(sd, struct adv76xx_state, sd);
362 }
363
364 static inline unsigned htotal(const struct v4l2_bt_timings *t)
365 {
366         return V4L2_DV_BT_FRAME_WIDTH(t);
367 }
368
369 static inline unsigned vtotal(const struct v4l2_bt_timings *t)
370 {
371         return V4L2_DV_BT_FRAME_HEIGHT(t);
372 }
373
374 /* ----------------------------------------------------------------------- */
375
376 static s32 adv_smbus_read_byte_data_check(struct i2c_client *client,
377                 u8 command, bool check)
378 {
379         union i2c_smbus_data data;
380
381         if (!i2c_smbus_xfer(client->adapter, client->addr, client->flags,
382                         I2C_SMBUS_READ, command,
383                         I2C_SMBUS_BYTE_DATA, &data))
384                 return data.byte;
385         if (check)
386                 v4l_err(client, "error reading %02x, %02x\n",
387                                 client->addr, command);
388         return -EIO;
389 }
390
391 static s32 adv_smbus_read_byte_data(struct adv76xx_state *state,
392                                     enum adv76xx_page page, u8 command)
393 {
394         return adv_smbus_read_byte_data_check(state->i2c_clients[page],
395                                               command, true);
396 }
397
398 static s32 adv_smbus_write_byte_data(struct adv76xx_state *state,
399                                      enum adv76xx_page page, u8 command,
400                                      u8 value)
401 {
402         struct i2c_client *client = state->i2c_clients[page];
403         union i2c_smbus_data data;
404         int err;
405         int i;
406
407         data.byte = value;
408         for (i = 0; i < 3; i++) {
409                 err = i2c_smbus_xfer(client->adapter, client->addr,
410                                 client->flags,
411                                 I2C_SMBUS_WRITE, command,
412                                 I2C_SMBUS_BYTE_DATA, &data);
413                 if (!err)
414                         break;
415         }
416         if (err < 0)
417                 v4l_err(client, "error writing %02x, %02x, %02x\n",
418                                 client->addr, command, value);
419         return err;
420 }
421
422 static s32 adv_smbus_write_i2c_block_data(struct adv76xx_state *state,
423                                           enum adv76xx_page page, u8 command,
424                                           unsigned length, const u8 *values)
425 {
426         struct i2c_client *client = state->i2c_clients[page];
427         union i2c_smbus_data data;
428
429         if (length > I2C_SMBUS_BLOCK_MAX)
430                 length = I2C_SMBUS_BLOCK_MAX;
431         data.block[0] = length;
432         memcpy(data.block + 1, values, length);
433         return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
434                               I2C_SMBUS_WRITE, command,
435                               I2C_SMBUS_I2C_BLOCK_DATA, &data);
436 }
437
438 /* ----------------------------------------------------------------------- */
439
440 static inline int io_read(struct v4l2_subdev *sd, u8 reg)
441 {
442         struct adv76xx_state *state = to_state(sd);
443
444         return adv_smbus_read_byte_data(state, ADV76XX_PAGE_IO, reg);
445 }
446
447 static inline int io_write(struct v4l2_subdev *sd, u8 reg, u8 val)
448 {
449         struct adv76xx_state *state = to_state(sd);
450
451         return adv_smbus_write_byte_data(state, ADV76XX_PAGE_IO, reg, val);
452 }
453
454 static inline int io_write_clr_set(struct v4l2_subdev *sd, u8 reg, u8 mask, u8 val)
455 {
456         return io_write(sd, reg, (io_read(sd, reg) & ~mask) | val);
457 }
458
459 static inline int avlink_read(struct v4l2_subdev *sd, u8 reg)
460 {
461         struct adv76xx_state *state = to_state(sd);
462
463         return adv_smbus_read_byte_data(state, ADV7604_PAGE_AVLINK, reg);
464 }
465
466 static inline int avlink_write(struct v4l2_subdev *sd, u8 reg, u8 val)
467 {
468         struct adv76xx_state *state = to_state(sd);
469
470         return adv_smbus_write_byte_data(state, ADV7604_PAGE_AVLINK, reg, val);
471 }
472
473 static inline int cec_read(struct v4l2_subdev *sd, u8 reg)
474 {
475         struct adv76xx_state *state = to_state(sd);
476
477         return adv_smbus_read_byte_data(state, ADV76XX_PAGE_CEC, reg);
478 }
479
480 static inline int cec_write(struct v4l2_subdev *sd, u8 reg, u8 val)
481 {
482         struct adv76xx_state *state = to_state(sd);
483
484         return adv_smbus_write_byte_data(state, ADV76XX_PAGE_CEC, reg, val);
485 }
486
487 static inline int infoframe_read(struct v4l2_subdev *sd, u8 reg)
488 {
489         struct adv76xx_state *state = to_state(sd);
490
491         return adv_smbus_read_byte_data(state, ADV76XX_PAGE_INFOFRAME, reg);
492 }
493
494 static inline int infoframe_write(struct v4l2_subdev *sd, u8 reg, u8 val)
495 {
496         struct adv76xx_state *state = to_state(sd);
497
498         return adv_smbus_write_byte_data(state, ADV76XX_PAGE_INFOFRAME,
499                                          reg, val);
500 }
501
502 static inline int afe_read(struct v4l2_subdev *sd, u8 reg)
503 {
504         struct adv76xx_state *state = to_state(sd);
505
506         return adv_smbus_read_byte_data(state, ADV76XX_PAGE_AFE, reg);
507 }
508
509 static inline int afe_write(struct v4l2_subdev *sd, u8 reg, u8 val)
510 {
511         struct adv76xx_state *state = to_state(sd);
512
513         return adv_smbus_write_byte_data(state, ADV76XX_PAGE_AFE, reg, val);
514 }
515
516 static inline int rep_read(struct v4l2_subdev *sd, u8 reg)
517 {
518         struct adv76xx_state *state = to_state(sd);
519
520         return adv_smbus_read_byte_data(state, ADV76XX_PAGE_REP, reg);
521 }
522
523 static inline int rep_write(struct v4l2_subdev *sd, u8 reg, u8 val)
524 {
525         struct adv76xx_state *state = to_state(sd);
526
527         return adv_smbus_write_byte_data(state, ADV76XX_PAGE_REP, reg, val);
528 }
529
530 static inline int rep_write_clr_set(struct v4l2_subdev *sd, u8 reg, u8 mask, u8 val)
531 {
532         return rep_write(sd, reg, (rep_read(sd, reg) & ~mask) | val);
533 }
534
535 static inline int edid_read(struct v4l2_subdev *sd, u8 reg)
536 {
537         struct adv76xx_state *state = to_state(sd);
538
539         return adv_smbus_read_byte_data(state, ADV76XX_PAGE_EDID, reg);
540 }
541
542 static inline int edid_write(struct v4l2_subdev *sd, u8 reg, u8 val)
543 {
544         struct adv76xx_state *state = to_state(sd);
545
546         return adv_smbus_write_byte_data(state, ADV76XX_PAGE_EDID, reg, val);
547 }
548
549 static inline int edid_write_block(struct v4l2_subdev *sd,
550                                         unsigned len, const u8 *val)
551 {
552         struct adv76xx_state *state = to_state(sd);
553         int err = 0;
554         int i;
555
556         v4l2_dbg(2, debug, sd, "%s: write EDID block (%d byte)\n", __func__, len);
557
558         for (i = 0; !err && i < len; i += I2C_SMBUS_BLOCK_MAX)
559                 err = adv_smbus_write_i2c_block_data(state, ADV76XX_PAGE_EDID,
560                                 i, I2C_SMBUS_BLOCK_MAX, val + i);
561         return err;
562 }
563
564 static void adv76xx_set_hpd(struct adv76xx_state *state, unsigned int hpd)
565 {
566         unsigned int i;
567
568         for (i = 0; i < state->info->num_dv_ports; ++i)
569                 gpiod_set_value_cansleep(state->hpd_gpio[i], hpd & BIT(i));
570
571         v4l2_subdev_notify(&state->sd, ADV76XX_HOTPLUG, &hpd);
572 }
573
574 static void adv76xx_delayed_work_enable_hotplug(struct work_struct *work)
575 {
576         struct delayed_work *dwork = to_delayed_work(work);
577         struct adv76xx_state *state = container_of(dwork, struct adv76xx_state,
578                                                 delayed_work_enable_hotplug);
579         struct v4l2_subdev *sd = &state->sd;
580
581         v4l2_dbg(2, debug, sd, "%s: enable hotplug\n", __func__);
582
583         adv76xx_set_hpd(state, state->edid.present);
584 }
585
586 static inline int hdmi_read(struct v4l2_subdev *sd, u8 reg)
587 {
588         struct adv76xx_state *state = to_state(sd);
589
590         return adv_smbus_read_byte_data(state, ADV76XX_PAGE_HDMI, reg);
591 }
592
593 static u16 hdmi_read16(struct v4l2_subdev *sd, u8 reg, u16 mask)
594 {
595         return ((hdmi_read(sd, reg) << 8) | hdmi_read(sd, reg + 1)) & mask;
596 }
597
598 static inline int hdmi_write(struct v4l2_subdev *sd, u8 reg, u8 val)
599 {
600         struct adv76xx_state *state = to_state(sd);
601
602         return adv_smbus_write_byte_data(state, ADV76XX_PAGE_HDMI, reg, val);
603 }
604
605 static inline int hdmi_write_clr_set(struct v4l2_subdev *sd, u8 reg, u8 mask, u8 val)
606 {
607         return hdmi_write(sd, reg, (hdmi_read(sd, reg) & ~mask) | val);
608 }
609
610 static inline int test_write(struct v4l2_subdev *sd, u8 reg, u8 val)
611 {
612         struct adv76xx_state *state = to_state(sd);
613
614         return adv_smbus_write_byte_data(state, ADV76XX_PAGE_TEST, reg, val);
615 }
616
617 static inline int cp_read(struct v4l2_subdev *sd, u8 reg)
618 {
619         struct adv76xx_state *state = to_state(sd);
620
621         return adv_smbus_read_byte_data(state, ADV76XX_PAGE_CP, reg);
622 }
623
624 static u16 cp_read16(struct v4l2_subdev *sd, u8 reg, u16 mask)
625 {
626         return ((cp_read(sd, reg) << 8) | cp_read(sd, reg + 1)) & mask;
627 }
628
629 static inline int cp_write(struct v4l2_subdev *sd, u8 reg, u8 val)
630 {
631         struct adv76xx_state *state = to_state(sd);
632
633         return adv_smbus_write_byte_data(state, ADV76XX_PAGE_CP, reg, val);
634 }
635
636 static inline int cp_write_clr_set(struct v4l2_subdev *sd, u8 reg, u8 mask, u8 val)
637 {
638         return cp_write(sd, reg, (cp_read(sd, reg) & ~mask) | val);
639 }
640
641 static inline int vdp_read(struct v4l2_subdev *sd, u8 reg)
642 {
643         struct adv76xx_state *state = to_state(sd);
644
645         return adv_smbus_read_byte_data(state, ADV7604_PAGE_VDP, reg);
646 }
647
648 static inline int vdp_write(struct v4l2_subdev *sd, u8 reg, u8 val)
649 {
650         struct adv76xx_state *state = to_state(sd);
651
652         return adv_smbus_write_byte_data(state, ADV7604_PAGE_VDP, reg, val);
653 }
654
655 #define ADV76XX_REG(page, offset)       (((page) << 8) | (offset))
656 #define ADV76XX_REG_SEQ_TERM            0xffff
657
658 #ifdef CONFIG_VIDEO_ADV_DEBUG
659 static int adv76xx_read_reg(struct v4l2_subdev *sd, unsigned int reg)
660 {
661         struct adv76xx_state *state = to_state(sd);
662         unsigned int page = reg >> 8;
663
664         if (!(BIT(page) & state->info->page_mask))
665                 return -EINVAL;
666
667         reg &= 0xff;
668
669         return adv_smbus_read_byte_data(state, page, reg);
670 }
671 #endif
672
673 static int adv76xx_write_reg(struct v4l2_subdev *sd, unsigned int reg, u8 val)
674 {
675         struct adv76xx_state *state = to_state(sd);
676         unsigned int page = reg >> 8;
677
678         if (!(BIT(page) & state->info->page_mask))
679                 return -EINVAL;
680
681         reg &= 0xff;
682
683         return adv_smbus_write_byte_data(state, page, reg, val);
684 }
685
686 static void adv76xx_write_reg_seq(struct v4l2_subdev *sd,
687                                   const struct adv76xx_reg_seq *reg_seq)
688 {
689         unsigned int i;
690
691         for (i = 0; reg_seq[i].reg != ADV76XX_REG_SEQ_TERM; i++)
692                 adv76xx_write_reg(sd, reg_seq[i].reg, reg_seq[i].val);
693 }
694
695 /* -----------------------------------------------------------------------------
696  * Format helpers
697  */
698
699 static const struct adv76xx_format_info adv7604_formats[] = {
700         { MEDIA_BUS_FMT_RGB888_1X24, ADV76XX_OP_CH_SEL_RGB, true, false,
701           ADV76XX_OP_MODE_SEL_SDR_444 | ADV76XX_OP_FORMAT_SEL_8BIT },
702         { MEDIA_BUS_FMT_YUYV8_2X8, ADV76XX_OP_CH_SEL_RGB, false, false,
703           ADV76XX_OP_MODE_SEL_SDR_422 | ADV76XX_OP_FORMAT_SEL_8BIT },
704         { MEDIA_BUS_FMT_YVYU8_2X8, ADV76XX_OP_CH_SEL_RGB, false, true,
705           ADV76XX_OP_MODE_SEL_SDR_422 | ADV76XX_OP_FORMAT_SEL_8BIT },
706         { MEDIA_BUS_FMT_YUYV10_2X10, ADV76XX_OP_CH_SEL_RGB, false, false,
707           ADV76XX_OP_MODE_SEL_SDR_422 | ADV7604_OP_FORMAT_SEL_10BIT },
708         { MEDIA_BUS_FMT_YVYU10_2X10, ADV76XX_OP_CH_SEL_RGB, false, true,
709           ADV76XX_OP_MODE_SEL_SDR_422 | ADV7604_OP_FORMAT_SEL_10BIT },
710         { MEDIA_BUS_FMT_YUYV12_2X12, ADV76XX_OP_CH_SEL_RGB, false, false,
711           ADV76XX_OP_MODE_SEL_SDR_422 | ADV76XX_OP_FORMAT_SEL_12BIT },
712         { MEDIA_BUS_FMT_YVYU12_2X12, ADV76XX_OP_CH_SEL_RGB, false, true,
713           ADV76XX_OP_MODE_SEL_SDR_422 | ADV76XX_OP_FORMAT_SEL_12BIT },
714         { MEDIA_BUS_FMT_UYVY8_1X16, ADV76XX_OP_CH_SEL_RBG, false, false,
715           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_8BIT },
716         { MEDIA_BUS_FMT_VYUY8_1X16, ADV76XX_OP_CH_SEL_RBG, false, true,
717           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_8BIT },
718         { MEDIA_BUS_FMT_YUYV8_1X16, ADV76XX_OP_CH_SEL_RGB, false, false,
719           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_8BIT },
720         { MEDIA_BUS_FMT_YVYU8_1X16, ADV76XX_OP_CH_SEL_RGB, false, true,
721           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_8BIT },
722         { MEDIA_BUS_FMT_UYVY10_1X20, ADV76XX_OP_CH_SEL_RBG, false, false,
723           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV7604_OP_FORMAT_SEL_10BIT },
724         { MEDIA_BUS_FMT_VYUY10_1X20, ADV76XX_OP_CH_SEL_RBG, false, true,
725           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV7604_OP_FORMAT_SEL_10BIT },
726         { MEDIA_BUS_FMT_YUYV10_1X20, ADV76XX_OP_CH_SEL_RGB, false, false,
727           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV7604_OP_FORMAT_SEL_10BIT },
728         { MEDIA_BUS_FMT_YVYU10_1X20, ADV76XX_OP_CH_SEL_RGB, false, true,
729           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV7604_OP_FORMAT_SEL_10BIT },
730         { MEDIA_BUS_FMT_UYVY12_1X24, ADV76XX_OP_CH_SEL_RBG, false, false,
731           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_12BIT },
732         { MEDIA_BUS_FMT_VYUY12_1X24, ADV76XX_OP_CH_SEL_RBG, false, true,
733           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_12BIT },
734         { MEDIA_BUS_FMT_YUYV12_1X24, ADV76XX_OP_CH_SEL_RGB, false, false,
735           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_12BIT },
736         { MEDIA_BUS_FMT_YVYU12_1X24, ADV76XX_OP_CH_SEL_RGB, false, true,
737           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_12BIT },
738 };
739
740 static const struct adv76xx_format_info adv7611_formats[] = {
741         { MEDIA_BUS_FMT_RGB888_1X24, ADV76XX_OP_CH_SEL_RGB, true, false,
742           ADV76XX_OP_MODE_SEL_SDR_444 | ADV76XX_OP_FORMAT_SEL_8BIT },
743         { MEDIA_BUS_FMT_YUYV8_2X8, ADV76XX_OP_CH_SEL_RGB, false, false,
744           ADV76XX_OP_MODE_SEL_SDR_422 | ADV76XX_OP_FORMAT_SEL_8BIT },
745         { MEDIA_BUS_FMT_YVYU8_2X8, ADV76XX_OP_CH_SEL_RGB, false, true,
746           ADV76XX_OP_MODE_SEL_SDR_422 | ADV76XX_OP_FORMAT_SEL_8BIT },
747         { MEDIA_BUS_FMT_YUYV12_2X12, ADV76XX_OP_CH_SEL_RGB, false, false,
748           ADV76XX_OP_MODE_SEL_SDR_422 | ADV76XX_OP_FORMAT_SEL_12BIT },
749         { MEDIA_BUS_FMT_YVYU12_2X12, ADV76XX_OP_CH_SEL_RGB, false, true,
750           ADV76XX_OP_MODE_SEL_SDR_422 | ADV76XX_OP_FORMAT_SEL_12BIT },
751         { MEDIA_BUS_FMT_UYVY8_1X16, ADV76XX_OP_CH_SEL_RBG, false, false,
752           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_8BIT },
753         { MEDIA_BUS_FMT_VYUY8_1X16, ADV76XX_OP_CH_SEL_RBG, false, true,
754           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_8BIT },
755         { MEDIA_BUS_FMT_YUYV8_1X16, ADV76XX_OP_CH_SEL_RGB, false, false,
756           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_8BIT },
757         { MEDIA_BUS_FMT_YVYU8_1X16, ADV76XX_OP_CH_SEL_RGB, false, true,
758           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_8BIT },
759         { MEDIA_BUS_FMT_UYVY12_1X24, ADV76XX_OP_CH_SEL_RBG, false, false,
760           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_12BIT },
761         { MEDIA_BUS_FMT_VYUY12_1X24, ADV76XX_OP_CH_SEL_RBG, false, true,
762           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_12BIT },
763         { MEDIA_BUS_FMT_YUYV12_1X24, ADV76XX_OP_CH_SEL_RGB, false, false,
764           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_12BIT },
765         { MEDIA_BUS_FMT_YVYU12_1X24, ADV76XX_OP_CH_SEL_RGB, false, true,
766           ADV76XX_OP_MODE_SEL_SDR_422_2X | ADV76XX_OP_FORMAT_SEL_12BIT },
767 };
768
769 static const struct adv76xx_format_info *
770 adv76xx_format_info(struct adv76xx_state *state, u32 code)
771 {
772         unsigned int i;
773
774         for (i = 0; i < state->info->nformats; ++i) {
775                 if (state->info->formats[i].code == code)
776                         return &state->info->formats[i];
777         }
778
779         return NULL;
780 }
781
782 /* ----------------------------------------------------------------------- */
783
784 static inline bool is_analog_input(struct v4l2_subdev *sd)
785 {
786         struct adv76xx_state *state = to_state(sd);
787
788         return state->selected_input == ADV7604_PAD_VGA_RGB ||
789                state->selected_input == ADV7604_PAD_VGA_COMP;
790 }
791
792 static inline bool is_digital_input(struct v4l2_subdev *sd)
793 {
794         struct adv76xx_state *state = to_state(sd);
795
796         return state->selected_input == ADV76XX_PAD_HDMI_PORT_A ||
797                state->selected_input == ADV7604_PAD_HDMI_PORT_B ||
798                state->selected_input == ADV7604_PAD_HDMI_PORT_C ||
799                state->selected_input == ADV7604_PAD_HDMI_PORT_D;
800 }
801
802 /* ----------------------------------------------------------------------- */
803
804 #ifdef CONFIG_VIDEO_ADV_DEBUG
805 static void adv76xx_inv_register(struct v4l2_subdev *sd)
806 {
807         v4l2_info(sd, "0x000-0x0ff: IO Map\n");
808         v4l2_info(sd, "0x100-0x1ff: AVLink Map\n");
809         v4l2_info(sd, "0x200-0x2ff: CEC Map\n");
810         v4l2_info(sd, "0x300-0x3ff: InfoFrame Map\n");
811         v4l2_info(sd, "0x400-0x4ff: ESDP Map\n");
812         v4l2_info(sd, "0x500-0x5ff: DPP Map\n");
813         v4l2_info(sd, "0x600-0x6ff: AFE Map\n");
814         v4l2_info(sd, "0x700-0x7ff: Repeater Map\n");
815         v4l2_info(sd, "0x800-0x8ff: EDID Map\n");
816         v4l2_info(sd, "0x900-0x9ff: HDMI Map\n");
817         v4l2_info(sd, "0xa00-0xaff: Test Map\n");
818         v4l2_info(sd, "0xb00-0xbff: CP Map\n");
819         v4l2_info(sd, "0xc00-0xcff: VDP Map\n");
820 }
821
822 static int adv76xx_g_register(struct v4l2_subdev *sd,
823                                         struct v4l2_dbg_register *reg)
824 {
825         int ret;
826
827         ret = adv76xx_read_reg(sd, reg->reg);
828         if (ret < 0) {
829                 v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
830                 adv76xx_inv_register(sd);
831                 return ret;
832         }
833
834         reg->size = 1;
835         reg->val = ret;
836
837         return 0;
838 }
839
840 static int adv76xx_s_register(struct v4l2_subdev *sd,
841                                         const struct v4l2_dbg_register *reg)
842 {
843         int ret;
844
845         ret = adv76xx_write_reg(sd, reg->reg, reg->val);
846         if (ret < 0) {
847                 v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
848                 adv76xx_inv_register(sd);
849                 return ret;
850         }
851
852         return 0;
853 }
854 #endif
855
856 static unsigned int adv7604_read_cable_det(struct v4l2_subdev *sd)
857 {
858         u8 value = io_read(sd, 0x6f);
859
860         return ((value & 0x10) >> 4)
861              | ((value & 0x08) >> 2)
862              | ((value & 0x04) << 0)
863              | ((value & 0x02) << 2);
864 }
865
866 static unsigned int adv7611_read_cable_det(struct v4l2_subdev *sd)
867 {
868         u8 value = io_read(sd, 0x6f);
869
870         return value & 1;
871 }
872
873 static int adv76xx_s_detect_tx_5v_ctrl(struct v4l2_subdev *sd)
874 {
875         struct adv76xx_state *state = to_state(sd);
876         const struct adv76xx_chip_info *info = state->info;
877
878         return v4l2_ctrl_s_ctrl(state->detect_tx_5v_ctrl,
879                                 info->read_cable_det(sd));
880 }
881
882 static int find_and_set_predefined_video_timings(struct v4l2_subdev *sd,
883                 u8 prim_mode,
884                 const struct adv76xx_video_standards *predef_vid_timings,
885                 const struct v4l2_dv_timings *timings)
886 {
887         int i;
888
889         for (i = 0; predef_vid_timings[i].timings.bt.width; i++) {
890                 if (!v4l2_match_dv_timings(timings, &predef_vid_timings[i].timings,
891                                         is_digital_input(sd) ? 250000 : 1000000))
892                         continue;
893                 io_write(sd, 0x00, predef_vid_timings[i].vid_std); /* video std */
894                 io_write(sd, 0x01, (predef_vid_timings[i].v_freq << 4) +
895                                 prim_mode); /* v_freq and prim mode */
896                 return 0;
897         }
898
899         return -1;
900 }
901
902 static int configure_predefined_video_timings(struct v4l2_subdev *sd,
903                 struct v4l2_dv_timings *timings)
904 {
905         struct adv76xx_state *state = to_state(sd);
906         int err;
907
908         v4l2_dbg(1, debug, sd, "%s", __func__);
909
910         if (adv76xx_has_afe(state)) {
911                 /* reset to default values */
912                 io_write(sd, 0x16, 0x43);
913                 io_write(sd, 0x17, 0x5a);
914         }
915         /* disable embedded syncs for auto graphics mode */
916         cp_write_clr_set(sd, 0x81, 0x10, 0x00);
917         cp_write(sd, 0x8f, 0x00);
918         cp_write(sd, 0x90, 0x00);
919         cp_write(sd, 0xa2, 0x00);
920         cp_write(sd, 0xa3, 0x00);
921         cp_write(sd, 0xa4, 0x00);
922         cp_write(sd, 0xa5, 0x00);
923         cp_write(sd, 0xa6, 0x00);
924         cp_write(sd, 0xa7, 0x00);
925         cp_write(sd, 0xab, 0x00);
926         cp_write(sd, 0xac, 0x00);
927
928         if (is_analog_input(sd)) {
929                 err = find_and_set_predefined_video_timings(sd,
930                                 0x01, adv7604_prim_mode_comp, timings);
931                 if (err)
932                         err = find_and_set_predefined_video_timings(sd,
933                                         0x02, adv7604_prim_mode_gr, timings);
934         } else if (is_digital_input(sd)) {
935                 err = find_and_set_predefined_video_timings(sd,
936                                 0x05, adv76xx_prim_mode_hdmi_comp, timings);
937                 if (err)
938                         err = find_and_set_predefined_video_timings(sd,
939                                         0x06, adv76xx_prim_mode_hdmi_gr, timings);
940         } else {
941                 v4l2_dbg(2, debug, sd, "%s: Unknown port %d selected\n",
942                                 __func__, state->selected_input);
943                 err = -1;
944         }
945
946
947         return err;
948 }
949
950 static void configure_custom_video_timings(struct v4l2_subdev *sd,
951                 const struct v4l2_bt_timings *bt)
952 {
953         struct adv76xx_state *state = to_state(sd);
954         u32 width = htotal(bt);
955         u32 height = vtotal(bt);
956         u16 cp_start_sav = bt->hsync + bt->hbackporch - 4;
957         u16 cp_start_eav = width - bt->hfrontporch;
958         u16 cp_start_vbi = height - bt->vfrontporch;
959         u16 cp_end_vbi = bt->vsync + bt->vbackporch;
960         u16 ch1_fr_ll = (((u32)bt->pixelclock / 100) > 0) ?
961                 ((width * (ADV76XX_FSC / 100)) / ((u32)bt->pixelclock / 100)) : 0;
962         const u8 pll[2] = {
963                 0xc0 | ((width >> 8) & 0x1f),
964                 width & 0xff
965         };
966
967         v4l2_dbg(2, debug, sd, "%s\n", __func__);
968
969         if (is_analog_input(sd)) {
970                 /* auto graphics */
971                 io_write(sd, 0x00, 0x07); /* video std */
972                 io_write(sd, 0x01, 0x02); /* prim mode */
973                 /* enable embedded syncs for auto graphics mode */
974                 cp_write_clr_set(sd, 0x81, 0x10, 0x10);
975
976                 /* Should only be set in auto-graphics mode [REF_02, p. 91-92] */
977                 /* setup PLL_DIV_MAN_EN and PLL_DIV_RATIO */
978                 /* IO-map reg. 0x16 and 0x17 should be written in sequence */
979                 if (adv_smbus_write_i2c_block_data(state, ADV76XX_PAGE_IO,
980                                                    0x16, 2, pll))
981                         v4l2_err(sd, "writing to reg 0x16 and 0x17 failed\n");
982
983                 /* active video - horizontal timing */
984                 cp_write(sd, 0xa2, (cp_start_sav >> 4) & 0xff);
985                 cp_write(sd, 0xa3, ((cp_start_sav & 0x0f) << 4) |
986                                    ((cp_start_eav >> 8) & 0x0f));
987                 cp_write(sd, 0xa4, cp_start_eav & 0xff);
988
989                 /* active video - vertical timing */
990                 cp_write(sd, 0xa5, (cp_start_vbi >> 4) & 0xff);
991                 cp_write(sd, 0xa6, ((cp_start_vbi & 0xf) << 4) |
992                                    ((cp_end_vbi >> 8) & 0xf));
993                 cp_write(sd, 0xa7, cp_end_vbi & 0xff);
994         } else if (is_digital_input(sd)) {
995                 /* set default prim_mode/vid_std for HDMI
996                    according to [REF_03, c. 4.2] */
997                 io_write(sd, 0x00, 0x02); /* video std */
998                 io_write(sd, 0x01, 0x06); /* prim mode */
999         } else {
1000                 v4l2_dbg(2, debug, sd, "%s: Unknown port %d selected\n",
1001                                 __func__, state->selected_input);
1002         }
1003
1004         cp_write(sd, 0x8f, (ch1_fr_ll >> 8) & 0x7);
1005         cp_write(sd, 0x90, ch1_fr_ll & 0xff);
1006         cp_write(sd, 0xab, (height >> 4) & 0xff);
1007         cp_write(sd, 0xac, (height & 0x0f) << 4);
1008 }
1009
1010 static void adv76xx_set_offset(struct v4l2_subdev *sd, bool auto_offset, u16 offset_a, u16 offset_b, u16 offset_c)
1011 {
1012         struct adv76xx_state *state = to_state(sd);
1013         u8 offset_buf[4];
1014
1015         if (auto_offset) {
1016                 offset_a = 0x3ff;
1017                 offset_b = 0x3ff;
1018                 offset_c = 0x3ff;
1019         }
1020
1021         v4l2_dbg(2, debug, sd, "%s: %s offset: a = 0x%x, b = 0x%x, c = 0x%x\n",
1022                         __func__, auto_offset ? "Auto" : "Manual",
1023                         offset_a, offset_b, offset_c);
1024
1025         offset_buf[0] = (cp_read(sd, 0x77) & 0xc0) | ((offset_a & 0x3f0) >> 4);
1026         offset_buf[1] = ((offset_a & 0x00f) << 4) | ((offset_b & 0x3c0) >> 6);
1027         offset_buf[2] = ((offset_b & 0x03f) << 2) | ((offset_c & 0x300) >> 8);
1028         offset_buf[3] = offset_c & 0x0ff;
1029
1030         /* Registers must be written in this order with no i2c access in between */
1031         if (adv_smbus_write_i2c_block_data(state, ADV76XX_PAGE_CP,
1032                                            0x77, 4, offset_buf))
1033                 v4l2_err(sd, "%s: i2c error writing to CP reg 0x77, 0x78, 0x79, 0x7a\n", __func__);
1034 }
1035
1036 static void adv76xx_set_gain(struct v4l2_subdev *sd, bool auto_gain, u16 gain_a, u16 gain_b, u16 gain_c)
1037 {
1038         struct adv76xx_state *state = to_state(sd);
1039         u8 gain_buf[4];
1040         u8 gain_man = 1;
1041         u8 agc_mode_man = 1;
1042
1043         if (auto_gain) {
1044                 gain_man = 0;
1045                 agc_mode_man = 0;
1046                 gain_a = 0x100;
1047                 gain_b = 0x100;
1048                 gain_c = 0x100;
1049         }
1050
1051         v4l2_dbg(2, debug, sd, "%s: %s gain: a = 0x%x, b = 0x%x, c = 0x%x\n",
1052                         __func__, auto_gain ? "Auto" : "Manual",
1053                         gain_a, gain_b, gain_c);
1054
1055         gain_buf[0] = ((gain_man << 7) | (agc_mode_man << 6) | ((gain_a & 0x3f0) >> 4));
1056         gain_buf[1] = (((gain_a & 0x00f) << 4) | ((gain_b & 0x3c0) >> 6));
1057         gain_buf[2] = (((gain_b & 0x03f) << 2) | ((gain_c & 0x300) >> 8));
1058         gain_buf[3] = ((gain_c & 0x0ff));
1059
1060         /* Registers must be written in this order with no i2c access in between */
1061         if (adv_smbus_write_i2c_block_data(state, ADV76XX_PAGE_CP,
1062                                            0x73, 4, gain_buf))
1063                 v4l2_err(sd, "%s: i2c error writing to CP reg 0x73, 0x74, 0x75, 0x76\n", __func__);
1064 }
1065
1066 static void set_rgb_quantization_range(struct v4l2_subdev *sd)
1067 {
1068         struct adv76xx_state *state = to_state(sd);
1069         bool rgb_output = io_read(sd, 0x02) & 0x02;
1070         bool hdmi_signal = hdmi_read(sd, 0x05) & 0x80;
1071
1072         v4l2_dbg(2, debug, sd, "%s: RGB quantization range: %d, RGB out: %d, HDMI: %d\n",
1073                         __func__, state->rgb_quantization_range,
1074                         rgb_output, hdmi_signal);
1075
1076         adv76xx_set_gain(sd, true, 0x0, 0x0, 0x0);
1077         adv76xx_set_offset(sd, true, 0x0, 0x0, 0x0);
1078
1079         switch (state->rgb_quantization_range) {
1080         case V4L2_DV_RGB_RANGE_AUTO:
1081                 if (state->selected_input == ADV7604_PAD_VGA_RGB) {
1082                         /* Receiving analog RGB signal
1083                          * Set RGB full range (0-255) */
1084                         io_write_clr_set(sd, 0x02, 0xf0, 0x10);
1085                         break;
1086                 }
1087
1088                 if (state->selected_input == ADV7604_PAD_VGA_COMP) {
1089                         /* Receiving analog YPbPr signal
1090                          * Set automode */
1091                         io_write_clr_set(sd, 0x02, 0xf0, 0xf0);
1092                         break;
1093                 }
1094
1095                 if (hdmi_signal) {
1096                         /* Receiving HDMI signal
1097                          * Set automode */
1098                         io_write_clr_set(sd, 0x02, 0xf0, 0xf0);
1099                         break;
1100                 }
1101
1102                 /* Receiving DVI-D signal
1103                  * ADV7604 selects RGB limited range regardless of
1104                  * input format (CE/IT) in automatic mode */
1105                 if (state->timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO) {
1106                         /* RGB limited range (16-235) */
1107                         io_write_clr_set(sd, 0x02, 0xf0, 0x00);
1108                 } else {
1109                         /* RGB full range (0-255) */
1110                         io_write_clr_set(sd, 0x02, 0xf0, 0x10);
1111
1112                         if (is_digital_input(sd) && rgb_output) {
1113                                 adv76xx_set_offset(sd, false, 0x40, 0x40, 0x40);
1114                         } else {
1115                                 adv76xx_set_gain(sd, false, 0xe0, 0xe0, 0xe0);
1116                                 adv76xx_set_offset(sd, false, 0x70, 0x70, 0x70);
1117                         }
1118                 }
1119                 break;
1120         case V4L2_DV_RGB_RANGE_LIMITED:
1121                 if (state->selected_input == ADV7604_PAD_VGA_COMP) {
1122                         /* YCrCb limited range (16-235) */
1123                         io_write_clr_set(sd, 0x02, 0xf0, 0x20);
1124                         break;
1125                 }
1126
1127                 /* RGB limited range (16-235) */
1128                 io_write_clr_set(sd, 0x02, 0xf0, 0x00);
1129
1130                 break;
1131         case V4L2_DV_RGB_RANGE_FULL:
1132                 if (state->selected_input == ADV7604_PAD_VGA_COMP) {
1133                         /* YCrCb full range (0-255) */
1134                         io_write_clr_set(sd, 0x02, 0xf0, 0x60);
1135                         break;
1136                 }
1137
1138                 /* RGB full range (0-255) */
1139                 io_write_clr_set(sd, 0x02, 0xf0, 0x10);
1140
1141                 if (is_analog_input(sd) || hdmi_signal)
1142                         break;
1143
1144                 /* Adjust gain/offset for DVI-D signals only */
1145                 if (rgb_output) {
1146                         adv76xx_set_offset(sd, false, 0x40, 0x40, 0x40);
1147                 } else {
1148                         adv76xx_set_gain(sd, false, 0xe0, 0xe0, 0xe0);
1149                         adv76xx_set_offset(sd, false, 0x70, 0x70, 0x70);
1150                 }
1151                 break;
1152         }
1153 }
1154
1155 static int adv76xx_s_ctrl(struct v4l2_ctrl *ctrl)
1156 {
1157         struct v4l2_subdev *sd =
1158                 &container_of(ctrl->handler, struct adv76xx_state, hdl)->sd;
1159
1160         struct adv76xx_state *state = to_state(sd);
1161
1162         switch (ctrl->id) {
1163         case V4L2_CID_BRIGHTNESS:
1164                 cp_write(sd, 0x3c, ctrl->val);
1165                 return 0;
1166         case V4L2_CID_CONTRAST:
1167                 cp_write(sd, 0x3a, ctrl->val);
1168                 return 0;
1169         case V4L2_CID_SATURATION:
1170                 cp_write(sd, 0x3b, ctrl->val);
1171                 return 0;
1172         case V4L2_CID_HUE:
1173                 cp_write(sd, 0x3d, ctrl->val);
1174                 return 0;
1175         case  V4L2_CID_DV_RX_RGB_RANGE:
1176                 state->rgb_quantization_range = ctrl->val;
1177                 set_rgb_quantization_range(sd);
1178                 return 0;
1179         case V4L2_CID_ADV_RX_ANALOG_SAMPLING_PHASE:
1180                 if (!adv76xx_has_afe(state))
1181                         return -EINVAL;
1182                 /* Set the analog sampling phase. This is needed to find the
1183                    best sampling phase for analog video: an application or
1184                    driver has to try a number of phases and analyze the picture
1185                    quality before settling on the best performing phase. */
1186                 afe_write(sd, 0xc8, ctrl->val);
1187                 return 0;
1188         case V4L2_CID_ADV_RX_FREE_RUN_COLOR_MANUAL:
1189                 /* Use the default blue color for free running mode,
1190                    or supply your own. */
1191                 cp_write_clr_set(sd, 0xbf, 0x04, ctrl->val << 2);
1192                 return 0;
1193         case V4L2_CID_ADV_RX_FREE_RUN_COLOR:
1194                 cp_write(sd, 0xc0, (ctrl->val & 0xff0000) >> 16);
1195                 cp_write(sd, 0xc1, (ctrl->val & 0x00ff00) >> 8);
1196                 cp_write(sd, 0xc2, (u8)(ctrl->val & 0x0000ff));
1197                 return 0;
1198         }
1199         return -EINVAL;
1200 }
1201
1202 /* ----------------------------------------------------------------------- */
1203
1204 static inline bool no_power(struct v4l2_subdev *sd)
1205 {
1206         /* Entire chip or CP powered off */
1207         return io_read(sd, 0x0c) & 0x24;
1208 }
1209
1210 static inline bool no_signal_tmds(struct v4l2_subdev *sd)
1211 {
1212         struct adv76xx_state *state = to_state(sd);
1213
1214         return !(io_read(sd, 0x6a) & (0x10 >> state->selected_input));
1215 }
1216
1217 static inline bool no_lock_tmds(struct v4l2_subdev *sd)
1218 {
1219         struct adv76xx_state *state = to_state(sd);
1220         const struct adv76xx_chip_info *info = state->info;
1221
1222         return (io_read(sd, 0x6a) & info->tdms_lock_mask) != info->tdms_lock_mask;
1223 }
1224
1225 static inline bool is_hdmi(struct v4l2_subdev *sd)
1226 {
1227         return hdmi_read(sd, 0x05) & 0x80;
1228 }
1229
1230 static inline bool no_lock_sspd(struct v4l2_subdev *sd)
1231 {
1232         struct adv76xx_state *state = to_state(sd);
1233
1234         /*
1235          * Chips without a AFE don't expose registers for the SSPD, so just assume
1236          * that we have a lock.
1237          */
1238         if (adv76xx_has_afe(state))
1239                 return false;
1240
1241         /* TODO channel 2 */
1242         return ((cp_read(sd, 0xb5) & 0xd0) != 0xd0);
1243 }
1244
1245 static inline bool no_lock_stdi(struct v4l2_subdev *sd)
1246 {
1247         /* TODO channel 2 */
1248         return !(cp_read(sd, 0xb1) & 0x80);
1249 }
1250
1251 static inline bool no_signal(struct v4l2_subdev *sd)
1252 {
1253         bool ret;
1254
1255         ret = no_power(sd);
1256
1257         ret |= no_lock_stdi(sd);
1258         ret |= no_lock_sspd(sd);
1259
1260         if (is_digital_input(sd)) {
1261                 ret |= no_lock_tmds(sd);
1262                 ret |= no_signal_tmds(sd);
1263         }
1264
1265         return ret;
1266 }
1267
1268 static inline bool no_lock_cp(struct v4l2_subdev *sd)
1269 {
1270         struct adv76xx_state *state = to_state(sd);
1271
1272         if (!adv76xx_has_afe(state))
1273                 return false;
1274
1275         /* CP has detected a non standard number of lines on the incoming
1276            video compared to what it is configured to receive by s_dv_timings */
1277         return io_read(sd, 0x12) & 0x01;
1278 }
1279
1280 static inline bool in_free_run(struct v4l2_subdev *sd)
1281 {
1282         return cp_read(sd, 0xff) & 0x10;
1283 }
1284
1285 static int adv76xx_g_input_status(struct v4l2_subdev *sd, u32 *status)
1286 {
1287         *status = 0;
1288         *status |= no_power(sd) ? V4L2_IN_ST_NO_POWER : 0;
1289         *status |= no_signal(sd) ? V4L2_IN_ST_NO_SIGNAL : 0;
1290         if (!in_free_run(sd) && no_lock_cp(sd))
1291                 *status |= is_digital_input(sd) ?
1292                            V4L2_IN_ST_NO_SYNC : V4L2_IN_ST_NO_H_LOCK;
1293
1294         v4l2_dbg(1, debug, sd, "%s: status = 0x%x\n", __func__, *status);
1295
1296         return 0;
1297 }
1298
1299 /* ----------------------------------------------------------------------- */
1300
1301 struct stdi_readback {
1302         u16 bl, lcf, lcvs;
1303         u8 hs_pol, vs_pol;
1304         bool interlaced;
1305 };
1306
1307 static int stdi2dv_timings(struct v4l2_subdev *sd,
1308                 struct stdi_readback *stdi,
1309                 struct v4l2_dv_timings *timings)
1310 {
1311         struct adv76xx_state *state = to_state(sd);
1312         u32 hfreq = (ADV76XX_FSC * 8) / stdi->bl;
1313         u32 pix_clk;
1314         int i;
1315
1316         for (i = 0; adv76xx_timings[i].bt.height; i++) {
1317                 if (vtotal(&adv76xx_timings[i].bt) != stdi->lcf + 1)
1318                         continue;
1319                 if (adv76xx_timings[i].bt.vsync != stdi->lcvs)
1320                         continue;
1321
1322                 pix_clk = hfreq * htotal(&adv76xx_timings[i].bt);
1323
1324                 if ((pix_clk < adv76xx_timings[i].bt.pixelclock + 1000000) &&
1325                     (pix_clk > adv76xx_timings[i].bt.pixelclock - 1000000)) {
1326                         *timings = adv76xx_timings[i];
1327                         return 0;
1328                 }
1329         }
1330
1331         if (v4l2_detect_cvt(stdi->lcf + 1, hfreq, stdi->lcvs,
1332                         (stdi->hs_pol == '+' ? V4L2_DV_HSYNC_POS_POL : 0) |
1333                         (stdi->vs_pol == '+' ? V4L2_DV_VSYNC_POS_POL : 0),
1334                         false, timings))
1335                 return 0;
1336         if (v4l2_detect_gtf(stdi->lcf + 1, hfreq, stdi->lcvs,
1337                         (stdi->hs_pol == '+' ? V4L2_DV_HSYNC_POS_POL : 0) |
1338                         (stdi->vs_pol == '+' ? V4L2_DV_VSYNC_POS_POL : 0),
1339                         false, state->aspect_ratio, timings))
1340                 return 0;
1341
1342         v4l2_dbg(2, debug, sd,
1343                 "%s: No format candidate found for lcvs = %d, lcf=%d, bl = %d, %chsync, %cvsync\n",
1344                 __func__, stdi->lcvs, stdi->lcf, stdi->bl,
1345                 stdi->hs_pol, stdi->vs_pol);
1346         return -1;
1347 }
1348
1349
1350 static int read_stdi(struct v4l2_subdev *sd, struct stdi_readback *stdi)
1351 {
1352         struct adv76xx_state *state = to_state(sd);
1353         const struct adv76xx_chip_info *info = state->info;
1354         u8 polarity;
1355
1356         if (no_lock_stdi(sd) || no_lock_sspd(sd)) {
1357                 v4l2_dbg(2, debug, sd, "%s: STDI and/or SSPD not locked\n", __func__);
1358                 return -1;
1359         }
1360
1361         /* read STDI */
1362         stdi->bl = cp_read16(sd, 0xb1, 0x3fff);
1363         stdi->lcf = cp_read16(sd, info->lcf_reg, 0x7ff);
1364         stdi->lcvs = cp_read(sd, 0xb3) >> 3;
1365         stdi->interlaced = io_read(sd, 0x12) & 0x10;
1366
1367         if (adv76xx_has_afe(state)) {
1368                 /* read SSPD */
1369                 polarity = cp_read(sd, 0xb5);
1370                 if ((polarity & 0x03) == 0x01) {
1371                         stdi->hs_pol = polarity & 0x10
1372                                      ? (polarity & 0x08 ? '+' : '-') : 'x';
1373                         stdi->vs_pol = polarity & 0x40
1374                                      ? (polarity & 0x20 ? '+' : '-') : 'x';
1375                 } else {
1376                         stdi->hs_pol = 'x';
1377                         stdi->vs_pol = 'x';
1378                 }
1379         } else {
1380                 polarity = hdmi_read(sd, 0x05);
1381                 stdi->hs_pol = polarity & 0x20 ? '+' : '-';
1382                 stdi->vs_pol = polarity & 0x10 ? '+' : '-';
1383         }
1384
1385         if (no_lock_stdi(sd) || no_lock_sspd(sd)) {
1386                 v4l2_dbg(2, debug, sd,
1387                         "%s: signal lost during readout of STDI/SSPD\n", __func__);
1388                 return -1;
1389         }
1390
1391         if (stdi->lcf < 239 || stdi->bl < 8 || stdi->bl == 0x3fff) {
1392                 v4l2_dbg(2, debug, sd, "%s: invalid signal\n", __func__);
1393                 memset(stdi, 0, sizeof(struct stdi_readback));
1394                 return -1;
1395         }
1396
1397         v4l2_dbg(2, debug, sd,
1398                 "%s: lcf (frame height - 1) = %d, bl = %d, lcvs (vsync) = %d, %chsync, %cvsync, %s\n",
1399                 __func__, stdi->lcf, stdi->bl, stdi->lcvs,
1400                 stdi->hs_pol, stdi->vs_pol,
1401                 stdi->interlaced ? "interlaced" : "progressive");
1402
1403         return 0;
1404 }
1405
1406 static int adv76xx_enum_dv_timings(struct v4l2_subdev *sd,
1407                         struct v4l2_enum_dv_timings *timings)
1408 {
1409         struct adv76xx_state *state = to_state(sd);
1410
1411         if (timings->index >= ARRAY_SIZE(adv76xx_timings) - 1)
1412                 return -EINVAL;
1413
1414         if (timings->pad >= state->source_pad)
1415                 return -EINVAL;
1416
1417         memset(timings->reserved, 0, sizeof(timings->reserved));
1418         timings->timings = adv76xx_timings[timings->index];
1419         return 0;
1420 }
1421
1422 static int adv76xx_dv_timings_cap(struct v4l2_subdev *sd,
1423                         struct v4l2_dv_timings_cap *cap)
1424 {
1425         struct adv76xx_state *state = to_state(sd);
1426
1427         if (cap->pad >= state->source_pad)
1428                 return -EINVAL;
1429
1430         cap->type = V4L2_DV_BT_656_1120;
1431         cap->bt.max_width = 1920;
1432         cap->bt.max_height = 1200;
1433         cap->bt.min_pixelclock = 25000000;
1434
1435         switch (cap->pad) {
1436         case ADV76XX_PAD_HDMI_PORT_A:
1437         case ADV7604_PAD_HDMI_PORT_B:
1438         case ADV7604_PAD_HDMI_PORT_C:
1439         case ADV7604_PAD_HDMI_PORT_D:
1440                 cap->bt.max_pixelclock = 225000000;
1441                 break;
1442         case ADV7604_PAD_VGA_RGB:
1443         case ADV7604_PAD_VGA_COMP:
1444         default:
1445                 cap->bt.max_pixelclock = 170000000;
1446                 break;
1447         }
1448
1449         cap->bt.standards = V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
1450                          V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT;
1451         cap->bt.capabilities = V4L2_DV_BT_CAP_PROGRESSIVE |
1452                 V4L2_DV_BT_CAP_REDUCED_BLANKING | V4L2_DV_BT_CAP_CUSTOM;
1453         return 0;
1454 }
1455
1456 /* Fill the optional fields .standards and .flags in struct v4l2_dv_timings
1457    if the format is listed in adv76xx_timings[] */
1458 static void adv76xx_fill_optional_dv_timings_fields(struct v4l2_subdev *sd,
1459                 struct v4l2_dv_timings *timings)
1460 {
1461         int i;
1462
1463         for (i = 0; adv76xx_timings[i].bt.width; i++) {
1464                 if (v4l2_match_dv_timings(timings, &adv76xx_timings[i],
1465                                         is_digital_input(sd) ? 250000 : 1000000)) {
1466                         *timings = adv76xx_timings[i];
1467                         break;
1468                 }
1469         }
1470 }
1471
1472 static unsigned int adv7604_read_hdmi_pixelclock(struct v4l2_subdev *sd)
1473 {
1474         unsigned int freq;
1475         int a, b;
1476
1477         a = hdmi_read(sd, 0x06);
1478         b = hdmi_read(sd, 0x3b);
1479         if (a < 0 || b < 0)
1480                 return 0;
1481         freq =  a * 1000000 + ((b & 0x30) >> 4) * 250000;
1482
1483         if (is_hdmi(sd)) {
1484                 /* adjust for deep color mode */
1485                 unsigned bits_per_channel = ((hdmi_read(sd, 0x0b) & 0x60) >> 4) + 8;
1486
1487                 freq = freq * 8 / bits_per_channel;
1488         }
1489
1490         return freq;
1491 }
1492
1493 static unsigned int adv7611_read_hdmi_pixelclock(struct v4l2_subdev *sd)
1494 {
1495         int a, b;
1496
1497         a = hdmi_read(sd, 0x51);
1498         b = hdmi_read(sd, 0x52);
1499         if (a < 0 || b < 0)
1500                 return 0;
1501         return ((a << 1) | (b >> 7)) * 1000000 + (b & 0x7f) * 1000000 / 128;
1502 }
1503
1504 static int adv76xx_query_dv_timings(struct v4l2_subdev *sd,
1505                         struct v4l2_dv_timings *timings)
1506 {
1507         struct adv76xx_state *state = to_state(sd);
1508         const struct adv76xx_chip_info *info = state->info;
1509         struct v4l2_bt_timings *bt = &timings->bt;
1510         struct stdi_readback stdi;
1511
1512         if (!timings)
1513                 return -EINVAL;
1514
1515         memset(timings, 0, sizeof(struct v4l2_dv_timings));
1516
1517         if (no_signal(sd)) {
1518                 state->restart_stdi_once = true;
1519                 v4l2_dbg(1, debug, sd, "%s: no valid signal\n", __func__);
1520                 return -ENOLINK;
1521         }
1522
1523         /* read STDI */
1524         if (read_stdi(sd, &stdi)) {
1525                 v4l2_dbg(1, debug, sd, "%s: STDI/SSPD not locked\n", __func__);
1526                 return -ENOLINK;
1527         }
1528         bt->interlaced = stdi.interlaced ?
1529                 V4L2_DV_INTERLACED : V4L2_DV_PROGRESSIVE;
1530
1531         if (is_digital_input(sd)) {
1532                 timings->type = V4L2_DV_BT_656_1120;
1533
1534                 bt->width = hdmi_read16(sd, 0x07, info->linewidth_mask);
1535                 bt->height = hdmi_read16(sd, 0x09, info->field0_height_mask);
1536                 bt->pixelclock = info->read_hdmi_pixelclock(sd);
1537                 bt->hfrontporch = hdmi_read16(sd, 0x20, info->hfrontporch_mask);
1538                 bt->hsync = hdmi_read16(sd, 0x22, info->hsync_mask);
1539                 bt->hbackporch = hdmi_read16(sd, 0x24, info->hbackporch_mask);
1540                 bt->vfrontporch = hdmi_read16(sd, 0x2a,
1541                         info->field0_vfrontporch_mask) / 2;
1542                 bt->vsync = hdmi_read16(sd, 0x2e, info->field0_vsync_mask) / 2;
1543                 bt->vbackporch = hdmi_read16(sd, 0x32,
1544                         info->field0_vbackporch_mask) / 2;
1545                 bt->polarities = ((hdmi_read(sd, 0x05) & 0x10) ? V4L2_DV_VSYNC_POS_POL : 0) |
1546                         ((hdmi_read(sd, 0x05) & 0x20) ? V4L2_DV_HSYNC_POS_POL : 0);
1547                 if (bt->interlaced == V4L2_DV_INTERLACED) {
1548                         bt->height += hdmi_read16(sd, 0x0b,
1549                                 info->field1_height_mask);
1550                         bt->il_vfrontporch = hdmi_read16(sd, 0x2c,
1551                                 info->field1_vfrontporch_mask) / 2;
1552                         bt->il_vsync = hdmi_read16(sd, 0x30,
1553                                 info->field1_vsync_mask) / 2;
1554                         bt->il_vbackporch = hdmi_read16(sd, 0x34,
1555                                 info->field1_vbackporch_mask) / 2;
1556                 }
1557                 adv76xx_fill_optional_dv_timings_fields(sd, timings);
1558         } else {
1559                 /* find format
1560                  * Since LCVS values are inaccurate [REF_03, p. 275-276],
1561                  * stdi2dv_timings() is called with lcvs +-1 if the first attempt fails.
1562                  */
1563                 if (!stdi2dv_timings(sd, &stdi, timings))
1564                         goto found;
1565                 stdi.lcvs += 1;
1566                 v4l2_dbg(1, debug, sd, "%s: lcvs + 1 = %d\n", __func__, stdi.lcvs);
1567                 if (!stdi2dv_timings(sd, &stdi, timings))
1568                         goto found;
1569                 stdi.lcvs -= 2;
1570                 v4l2_dbg(1, debug, sd, "%s: lcvs - 1 = %d\n", __func__, stdi.lcvs);
1571                 if (stdi2dv_timings(sd, &stdi, timings)) {
1572                         /*
1573                          * The STDI block may measure wrong values, especially
1574                          * for lcvs and lcf. If the driver can not find any
1575                          * valid timing, the STDI block is restarted to measure
1576                          * the video timings again. The function will return an
1577                          * error, but the restart of STDI will generate a new
1578                          * STDI interrupt and the format detection process will
1579                          * restart.
1580                          */
1581                         if (state->restart_stdi_once) {
1582                                 v4l2_dbg(1, debug, sd, "%s: restart STDI\n", __func__);
1583                                 /* TODO restart STDI for Sync Channel 2 */
1584                                 /* enter one-shot mode */
1585                                 cp_write_clr_set(sd, 0x86, 0x06, 0x00);
1586                                 /* trigger STDI restart */
1587                                 cp_write_clr_set(sd, 0x86, 0x06, 0x04);
1588                                 /* reset to continuous mode */
1589                                 cp_write_clr_set(sd, 0x86, 0x06, 0x02);
1590                                 state->restart_stdi_once = false;
1591                                 return -ENOLINK;
1592                         }
1593                         v4l2_dbg(1, debug, sd, "%s: format not supported\n", __func__);
1594                         return -ERANGE;
1595                 }
1596                 state->restart_stdi_once = true;
1597         }
1598 found:
1599
1600         if (no_signal(sd)) {
1601                 v4l2_dbg(1, debug, sd, "%s: signal lost during readout\n", __func__);
1602                 memset(timings, 0, sizeof(struct v4l2_dv_timings));
1603                 return -ENOLINK;
1604         }
1605
1606         if ((is_analog_input(sd) && bt->pixelclock > 170000000) ||
1607                         (is_digital_input(sd) && bt->pixelclock > 225000000)) {
1608                 v4l2_dbg(1, debug, sd, "%s: pixelclock out of range %d\n",
1609                                 __func__, (u32)bt->pixelclock);
1610                 return -ERANGE;
1611         }
1612
1613         if (debug > 1)
1614                 v4l2_print_dv_timings(sd->name, "adv76xx_query_dv_timings: ",
1615                                       timings, true);
1616
1617         return 0;
1618 }
1619
1620 static int adv76xx_s_dv_timings(struct v4l2_subdev *sd,
1621                 struct v4l2_dv_timings *timings)
1622 {
1623         struct adv76xx_state *state = to_state(sd);
1624         struct v4l2_bt_timings *bt;
1625         int err;
1626
1627         if (!timings)
1628                 return -EINVAL;
1629
1630         if (v4l2_match_dv_timings(&state->timings, timings, 0)) {
1631                 v4l2_dbg(1, debug, sd, "%s: no change\n", __func__);
1632                 return 0;
1633         }
1634
1635         bt = &timings->bt;
1636
1637         if ((is_analog_input(sd) && bt->pixelclock > 170000000) ||
1638                         (is_digital_input(sd) && bt->pixelclock > 225000000)) {
1639                 v4l2_dbg(1, debug, sd, "%s: pixelclock out of range %d\n",
1640                                 __func__, (u32)bt->pixelclock);
1641                 return -ERANGE;
1642         }
1643
1644         adv76xx_fill_optional_dv_timings_fields(sd, timings);
1645
1646         state->timings = *timings;
1647
1648         cp_write_clr_set(sd, 0x91, 0x40, bt->interlaced ? 0x40 : 0x00);
1649
1650         /* Use prim_mode and vid_std when available */
1651         err = configure_predefined_video_timings(sd, timings);
1652         if (err) {
1653                 /* custom settings when the video format
1654                  does not have prim_mode/vid_std */
1655                 configure_custom_video_timings(sd, bt);
1656         }
1657
1658         set_rgb_quantization_range(sd);
1659
1660         if (debug > 1)
1661                 v4l2_print_dv_timings(sd->name, "adv76xx_s_dv_timings: ",
1662                                       timings, true);
1663         return 0;
1664 }
1665
1666 static int adv76xx_g_dv_timings(struct v4l2_subdev *sd,
1667                 struct v4l2_dv_timings *timings)
1668 {
1669         struct adv76xx_state *state = to_state(sd);
1670
1671         *timings = state->timings;
1672         return 0;
1673 }
1674
1675 static void adv7604_set_termination(struct v4l2_subdev *sd, bool enable)
1676 {
1677         hdmi_write(sd, 0x01, enable ? 0x00 : 0x78);
1678 }
1679
1680 static void adv7611_set_termination(struct v4l2_subdev *sd, bool enable)
1681 {
1682         hdmi_write(sd, 0x83, enable ? 0xfe : 0xff);
1683 }
1684
1685 static void enable_input(struct v4l2_subdev *sd)
1686 {
1687         struct adv76xx_state *state = to_state(sd);
1688
1689         if (is_analog_input(sd)) {
1690                 io_write(sd, 0x15, 0xb0);   /* Disable Tristate of Pins (no audio) */
1691         } else if (is_digital_input(sd)) {
1692                 hdmi_write_clr_set(sd, 0x00, 0x03, state->selected_input);
1693                 state->info->set_termination(sd, true);
1694                 io_write(sd, 0x15, 0xa0);   /* Disable Tristate of Pins */
1695                 hdmi_write_clr_set(sd, 0x1a, 0x10, 0x00); /* Unmute audio */
1696         } else {
1697                 v4l2_dbg(2, debug, sd, "%s: Unknown port %d selected\n",
1698                                 __func__, state->selected_input);
1699         }
1700 }
1701
1702 static void disable_input(struct v4l2_subdev *sd)
1703 {
1704         struct adv76xx_state *state = to_state(sd);
1705
1706         hdmi_write_clr_set(sd, 0x1a, 0x10, 0x10); /* Mute audio */
1707         msleep(16); /* 512 samples with >= 32 kHz sample rate [REF_03, c. 7.16.10] */
1708         io_write(sd, 0x15, 0xbe);   /* Tristate all outputs from video core */
1709         state->info->set_termination(sd, false);
1710 }
1711
1712 static void select_input(struct v4l2_subdev *sd)
1713 {
1714         struct adv76xx_state *state = to_state(sd);
1715         const struct adv76xx_chip_info *info = state->info;
1716
1717         if (is_analog_input(sd)) {
1718                 adv76xx_write_reg_seq(sd, info->recommended_settings[0]);
1719
1720                 afe_write(sd, 0x00, 0x08); /* power up ADC */
1721                 afe_write(sd, 0x01, 0x06); /* power up Analog Front End */
1722                 afe_write(sd, 0xc8, 0x00); /* phase control */
1723         } else if (is_digital_input(sd)) {
1724                 hdmi_write(sd, 0x00, state->selected_input & 0x03);
1725
1726                 adv76xx_write_reg_seq(sd, info->recommended_settings[1]);
1727
1728                 if (adv76xx_has_afe(state)) {
1729                         afe_write(sd, 0x00, 0xff); /* power down ADC */
1730                         afe_write(sd, 0x01, 0xfe); /* power down Analog Front End */
1731                         afe_write(sd, 0xc8, 0x40); /* phase control */
1732                 }
1733
1734                 cp_write(sd, 0x3e, 0x00); /* CP core pre-gain control */
1735                 cp_write(sd, 0xc3, 0x39); /* CP coast control. Graphics mode */
1736                 cp_write(sd, 0x40, 0x80); /* CP core pre-gain control. Graphics mode */
1737         } else {
1738                 v4l2_dbg(2, debug, sd, "%s: Unknown port %d selected\n",
1739                                 __func__, state->selected_input);
1740         }
1741 }
1742
1743 static int adv76xx_s_routing(struct v4l2_subdev *sd,
1744                 u32 input, u32 output, u32 config)
1745 {
1746         struct adv76xx_state *state = to_state(sd);
1747
1748         v4l2_dbg(2, debug, sd, "%s: input %d, selected input %d",
1749                         __func__, input, state->selected_input);
1750
1751         if (input == state->selected_input)
1752                 return 0;
1753
1754         if (input > state->info->max_port)
1755                 return -EINVAL;
1756
1757         state->selected_input = input;
1758
1759         disable_input(sd);
1760         select_input(sd);
1761         enable_input(sd);
1762
1763         v4l2_subdev_notify(sd, V4L2_DEVICE_NOTIFY_EVENT,
1764                            (void *)&adv76xx_ev_fmt);
1765         return 0;
1766 }
1767
1768 static int adv76xx_enum_mbus_code(struct v4l2_subdev *sd,
1769                                   struct v4l2_subdev_pad_config *cfg,
1770                                   struct v4l2_subdev_mbus_code_enum *code)
1771 {
1772         struct adv76xx_state *state = to_state(sd);
1773
1774         if (code->index >= state->info->nformats)
1775                 return -EINVAL;
1776
1777         code->code = state->info->formats[code->index].code;
1778
1779         return 0;
1780 }
1781
1782 static void adv76xx_fill_format(struct adv76xx_state *state,
1783                                 struct v4l2_mbus_framefmt *format)
1784 {
1785         memset(format, 0, sizeof(*format));
1786
1787         format->width = state->timings.bt.width;
1788         format->height = state->timings.bt.height;
1789         format->field = V4L2_FIELD_NONE;
1790         format->colorspace = V4L2_COLORSPACE_SRGB;
1791
1792         if (state->timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO)
1793                 format->colorspace = (state->timings.bt.height <= 576) ?
1794                         V4L2_COLORSPACE_SMPTE170M : V4L2_COLORSPACE_REC709;
1795 }
1796
1797 /*
1798  * Compute the op_ch_sel value required to obtain on the bus the component order
1799  * corresponding to the selected format taking into account bus reordering
1800  * applied by the board at the output of the device.
1801  *
1802  * The following table gives the op_ch_value from the format component order
1803  * (expressed as op_ch_sel value in column) and the bus reordering (expressed as
1804  * adv76xx_bus_order value in row).
1805  *
1806  *           |  GBR(0)  GRB(1)  BGR(2)  RGB(3)  BRG(4)  RBG(5)
1807  * ----------+-------------------------------------------------
1808  * RGB (NOP) |  GBR     GRB     BGR     RGB     BRG     RBG
1809  * GRB (1-2) |  BGR     RGB     GBR     GRB     RBG     BRG
1810  * RBG (2-3) |  GRB     GBR     BRG     RBG     BGR     RGB
1811  * BGR (1-3) |  RBG     BRG     RGB     BGR     GRB     GBR
1812  * BRG (ROR) |  BRG     RBG     GRB     GBR     RGB     BGR
1813  * GBR (ROL) |  RGB     BGR     RBG     BRG     GBR     GRB
1814  */
1815 static unsigned int adv76xx_op_ch_sel(struct adv76xx_state *state)
1816 {
1817 #define _SEL(a,b,c,d,e,f)       { \
1818         ADV76XX_OP_CH_SEL_##a, ADV76XX_OP_CH_SEL_##b, ADV76XX_OP_CH_SEL_##c, \
1819         ADV76XX_OP_CH_SEL_##d, ADV76XX_OP_CH_SEL_##e, ADV76XX_OP_CH_SEL_##f }
1820 #define _BUS(x)                 [ADV7604_BUS_ORDER_##x]
1821
1822         static const unsigned int op_ch_sel[6][6] = {
1823                 _BUS(RGB) /* NOP */ = _SEL(GBR, GRB, BGR, RGB, BRG, RBG),
1824                 _BUS(GRB) /* 1-2 */ = _SEL(BGR, RGB, GBR, GRB, RBG, BRG),
1825                 _BUS(RBG) /* 2-3 */ = _SEL(GRB, GBR, BRG, RBG, BGR, RGB),
1826                 _BUS(BGR) /* 1-3 */ = _SEL(RBG, BRG, RGB, BGR, GRB, GBR),
1827                 _BUS(BRG) /* ROR */ = _SEL(BRG, RBG, GRB, GBR, RGB, BGR),
1828                 _BUS(GBR) /* ROL */ = _SEL(RGB, BGR, RBG, BRG, GBR, GRB),
1829         };
1830
1831         return op_ch_sel[state->pdata.bus_order][state->format->op_ch_sel >> 5];
1832 }
1833
1834 static void adv76xx_setup_format(struct adv76xx_state *state)
1835 {
1836         struct v4l2_subdev *sd = &state->sd;
1837
1838         io_write_clr_set(sd, 0x02, 0x02,
1839                         state->format->rgb_out ? ADV76XX_RGB_OUT : 0);
1840         io_write(sd, 0x03, state->format->op_format_sel |
1841                  state->pdata.op_format_mode_sel);
1842         io_write_clr_set(sd, 0x04, 0xe0, adv76xx_op_ch_sel(state));
1843         io_write_clr_set(sd, 0x05, 0x01,
1844                         state->format->swap_cb_cr ? ADV76XX_OP_SWAP_CB_CR : 0);
1845 }
1846
1847 static int adv76xx_get_format(struct v4l2_subdev *sd,
1848                               struct v4l2_subdev_pad_config *cfg,
1849                               struct v4l2_subdev_format *format)
1850 {
1851         struct adv76xx_state *state = to_state(sd);
1852
1853         if (format->pad != state->source_pad)
1854                 return -EINVAL;
1855
1856         adv76xx_fill_format(state, &format->format);
1857
1858         if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
1859                 struct v4l2_mbus_framefmt *fmt;
1860
1861                 fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
1862                 format->format.code = fmt->code;
1863         } else {
1864                 format->format.code = state->format->code;
1865         }
1866
1867         return 0;
1868 }
1869
1870 static int adv76xx_set_format(struct v4l2_subdev *sd,
1871                               struct v4l2_subdev_pad_config *cfg,
1872                               struct v4l2_subdev_format *format)
1873 {
1874         struct adv76xx_state *state = to_state(sd);
1875         const struct adv76xx_format_info *info;
1876
1877         if (format->pad != state->source_pad)
1878                 return -EINVAL;
1879
1880         info = adv76xx_format_info(state, format->format.code);
1881         if (info == NULL)
1882                 info = adv76xx_format_info(state, MEDIA_BUS_FMT_YUYV8_2X8);
1883
1884         adv76xx_fill_format(state, &format->format);
1885         format->format.code = info->code;
1886
1887         if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
1888                 struct v4l2_mbus_framefmt *fmt;
1889
1890                 fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
1891                 fmt->code = format->format.code;
1892         } else {
1893                 state->format = info;
1894                 adv76xx_setup_format(state);
1895         }
1896
1897         return 0;
1898 }
1899
1900 static int adv76xx_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
1901 {
1902         struct adv76xx_state *state = to_state(sd);
1903         const struct adv76xx_chip_info *info = state->info;
1904         const u8 irq_reg_0x43 = io_read(sd, 0x43);
1905         const u8 irq_reg_0x6b = io_read(sd, 0x6b);
1906         const u8 irq_reg_0x70 = io_read(sd, 0x70);
1907         u8 fmt_change_digital;
1908         u8 fmt_change;
1909         u8 tx_5v;
1910
1911         if (irq_reg_0x43)
1912                 io_write(sd, 0x44, irq_reg_0x43);
1913         if (irq_reg_0x70)
1914                 io_write(sd, 0x71, irq_reg_0x70);
1915         if (irq_reg_0x6b)
1916                 io_write(sd, 0x6c, irq_reg_0x6b);
1917
1918         v4l2_dbg(2, debug, sd, "%s: ", __func__);
1919
1920         /* format change */
1921         fmt_change = irq_reg_0x43 & 0x98;
1922         fmt_change_digital = is_digital_input(sd)
1923                            ? irq_reg_0x6b & info->fmt_change_digital_mask
1924                            : 0;
1925
1926         if (fmt_change || fmt_change_digital) {
1927                 v4l2_dbg(1, debug, sd,
1928                         "%s: fmt_change = 0x%x, fmt_change_digital = 0x%x\n",
1929                         __func__, fmt_change, fmt_change_digital);
1930
1931                 v4l2_subdev_notify(sd, V4L2_DEVICE_NOTIFY_EVENT,
1932                                    (void *)&adv76xx_ev_fmt);
1933
1934                 if (handled)
1935                         *handled = true;
1936         }
1937         /* HDMI/DVI mode */
1938         if (irq_reg_0x6b & 0x01) {
1939                 v4l2_dbg(1, debug, sd, "%s: irq %s mode\n", __func__,
1940                         (io_read(sd, 0x6a) & 0x01) ? "HDMI" : "DVI");
1941                 set_rgb_quantization_range(sd);
1942                 if (handled)
1943                         *handled = true;
1944         }
1945
1946         /* tx 5v detect */
1947         tx_5v = io_read(sd, 0x70) & info->cable_det_mask;
1948         if (tx_5v) {
1949                 v4l2_dbg(1, debug, sd, "%s: tx_5v: 0x%x\n", __func__, tx_5v);
1950                 io_write(sd, 0x71, tx_5v);
1951                 adv76xx_s_detect_tx_5v_ctrl(sd);
1952                 if (handled)
1953                         *handled = true;
1954         }
1955         return 0;
1956 }
1957
1958 static int adv76xx_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
1959 {
1960         struct adv76xx_state *state = to_state(sd);
1961         u8 *data = NULL;
1962
1963         memset(edid->reserved, 0, sizeof(edid->reserved));
1964
1965         switch (edid->pad) {
1966         case ADV76XX_PAD_HDMI_PORT_A:
1967         case ADV7604_PAD_HDMI_PORT_B:
1968         case ADV7604_PAD_HDMI_PORT_C:
1969         case ADV7604_PAD_HDMI_PORT_D:
1970                 if (state->edid.present & (1 << edid->pad))
1971                         data = state->edid.edid;
1972                 break;
1973         default:
1974                 return -EINVAL;
1975         }
1976
1977         if (edid->start_block == 0 && edid->blocks == 0) {
1978                 edid->blocks = data ? state->edid.blocks : 0;
1979                 return 0;
1980         }
1981
1982         if (data == NULL)
1983                 return -ENODATA;
1984
1985         if (edid->start_block >= state->edid.blocks)
1986                 return -EINVAL;
1987
1988         if (edid->start_block + edid->blocks > state->edid.blocks)
1989                 edid->blocks = state->edid.blocks - edid->start_block;
1990
1991         memcpy(edid->edid, data + edid->start_block * 128, edid->blocks * 128);
1992
1993         return 0;
1994 }
1995
1996 static int get_edid_spa_location(const u8 *edid)
1997 {
1998         u8 d;
1999
2000         if ((edid[0x7e] != 1) ||
2001             (edid[0x80] != 0x02) ||
2002             (edid[0x81] != 0x03)) {
2003                 return -1;
2004         }
2005
2006         /* search Vendor Specific Data Block (tag 3) */
2007         d = edid[0x82] & 0x7f;
2008         if (d > 4) {
2009                 int i = 0x84;
2010                 int end = 0x80 + d;
2011
2012                 do {
2013                         u8 tag = edid[i] >> 5;
2014                         u8 len = edid[i] & 0x1f;
2015
2016                         if ((tag == 3) && (len >= 5))
2017                                 return i + 4;
2018                         i += len + 1;
2019                 } while (i < end);
2020         }
2021         return -1;
2022 }
2023
2024 static int adv76xx_set_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
2025 {
2026         struct adv76xx_state *state = to_state(sd);
2027         const struct adv76xx_chip_info *info = state->info;
2028         int spa_loc;
2029         int err;
2030         int i;
2031
2032         memset(edid->reserved, 0, sizeof(edid->reserved));
2033
2034         if (edid->pad > ADV7604_PAD_HDMI_PORT_D)
2035                 return -EINVAL;
2036         if (edid->start_block != 0)
2037                 return -EINVAL;
2038         if (edid->blocks == 0) {
2039                 /* Disable hotplug and I2C access to EDID RAM from DDC port */
2040                 state->edid.present &= ~(1 << edid->pad);
2041                 adv76xx_set_hpd(state, state->edid.present);
2042                 rep_write_clr_set(sd, info->edid_enable_reg, 0x0f, state->edid.present);
2043
2044                 /* Fall back to a 16:9 aspect ratio */
2045                 state->aspect_ratio.numerator = 16;
2046                 state->aspect_ratio.denominator = 9;
2047
2048                 if (!state->edid.present)
2049                         state->edid.blocks = 0;
2050
2051                 v4l2_dbg(2, debug, sd, "%s: clear EDID pad %d, edid.present = 0x%x\n",
2052                                 __func__, edid->pad, state->edid.present);
2053                 return 0;
2054         }
2055         if (edid->blocks > 2) {
2056                 edid->blocks = 2;
2057                 return -E2BIG;
2058         }
2059
2060         v4l2_dbg(2, debug, sd, "%s: write EDID pad %d, edid.present = 0x%x\n",
2061                         __func__, edid->pad, state->edid.present);
2062
2063         /* Disable hotplug and I2C access to EDID RAM from DDC port */
2064         cancel_delayed_work_sync(&state->delayed_work_enable_hotplug);
2065         adv76xx_set_hpd(state, 0);
2066         rep_write_clr_set(sd, info->edid_enable_reg, 0x0f, 0x00);
2067
2068         spa_loc = get_edid_spa_location(edid->edid);
2069         if (spa_loc < 0)
2070                 spa_loc = 0xc0; /* Default value [REF_02, p. 116] */
2071
2072         switch (edid->pad) {
2073         case ADV76XX_PAD_HDMI_PORT_A:
2074                 state->spa_port_a[0] = edid->edid[spa_loc];
2075                 state->spa_port_a[1] = edid->edid[spa_loc + 1];
2076                 break;
2077         case ADV7604_PAD_HDMI_PORT_B:
2078                 rep_write(sd, 0x70, edid->edid[spa_loc]);
2079                 rep_write(sd, 0x71, edid->edid[spa_loc + 1]);
2080                 break;
2081         case ADV7604_PAD_HDMI_PORT_C:
2082                 rep_write(sd, 0x72, edid->edid[spa_loc]);
2083                 rep_write(sd, 0x73, edid->edid[spa_loc + 1]);
2084                 break;
2085         case ADV7604_PAD_HDMI_PORT_D:
2086                 rep_write(sd, 0x74, edid->edid[spa_loc]);
2087                 rep_write(sd, 0x75, edid->edid[spa_loc + 1]);
2088                 break;
2089         default:
2090                 return -EINVAL;
2091         }
2092
2093         if (info->type == ADV7604) {
2094                 rep_write(sd, 0x76, spa_loc & 0xff);
2095                 rep_write_clr_set(sd, 0x77, 0x40, (spa_loc & 0x100) >> 2);
2096         } else {
2097                 /* FIXME: Where is the SPA location LSB register ? */
2098                 rep_write_clr_set(sd, 0x71, 0x01, (spa_loc & 0x100) >> 8);
2099         }
2100
2101         edid->edid[spa_loc] = state->spa_port_a[0];
2102         edid->edid[spa_loc + 1] = state->spa_port_a[1];
2103
2104         memcpy(state->edid.edid, edid->edid, 128 * edid->blocks);
2105         state->edid.blocks = edid->blocks;
2106         state->aspect_ratio = v4l2_calc_aspect_ratio(edid->edid[0x15],
2107                         edid->edid[0x16]);
2108         state->edid.present |= 1 << edid->pad;
2109
2110         err = edid_write_block(sd, 128 * edid->blocks, state->edid.edid);
2111         if (err < 0) {
2112                 v4l2_err(sd, "error %d writing edid pad %d\n", err, edid->pad);
2113                 return err;
2114         }
2115
2116         /* adv76xx calculates the checksums and enables I2C access to internal
2117            EDID RAM from DDC port. */
2118         rep_write_clr_set(sd, info->edid_enable_reg, 0x0f, state->edid.present);
2119
2120         for (i = 0; i < 1000; i++) {
2121                 if (rep_read(sd, info->edid_status_reg) & state->edid.present)
2122                         break;
2123                 mdelay(1);
2124         }
2125         if (i == 1000) {
2126                 v4l2_err(sd, "error enabling edid (0x%x)\n", state->edid.present);
2127                 return -EIO;
2128         }
2129
2130         /* enable hotplug after 100 ms */
2131         queue_delayed_work(state->work_queues,
2132                         &state->delayed_work_enable_hotplug, HZ / 10);
2133         return 0;
2134 }
2135
2136 /*********** avi info frame CEA-861-E **************/
2137
2138 static const struct adv76xx_cfg_read_infoframe adv76xx_cri[] = {
2139         { "AVI", 0x01, 0xe0, 0x00 },
2140         { "Audio", 0x02, 0xe3, 0x1c },
2141         { "SDP", 0x04, 0xe6, 0x2a },
2142         { "Vendor", 0x10, 0xec, 0x54 }
2143 };
2144
2145 static int adv76xx_read_infoframe(struct v4l2_subdev *sd, int index,
2146                                   union hdmi_infoframe *frame)
2147 {
2148         uint8_t buffer[32];
2149         u8 len;
2150         int i;
2151
2152         if (!(io_read(sd, 0x60) & adv76xx_cri[index].present_mask)) {
2153                 v4l2_info(sd, "%s infoframe not received\n",
2154                           adv76xx_cri[index].desc);
2155                 return -ENOENT;
2156         }
2157
2158         for (i = 0; i < 3; i++)
2159                 buffer[i] = infoframe_read(sd,
2160                                            adv76xx_cri[index].head_addr + i);
2161
2162         len = buffer[2] + 1;
2163
2164         if (len + 3 > sizeof(buffer)) {
2165                 v4l2_err(sd, "%s: invalid %s infoframe length %d\n", __func__,
2166                          adv76xx_cri[index].desc, len);
2167                 return -ENOENT;
2168         }
2169
2170         for (i = 0; i < len; i++)
2171                 buffer[i + 3] = infoframe_read(sd,
2172                                        adv76xx_cri[index].payload_addr + i);
2173
2174         if (hdmi_infoframe_unpack(frame, buffer) < 0) {
2175                 v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__,
2176                          adv76xx_cri[index].desc);
2177                 return -ENOENT;
2178         }
2179         return 0;
2180 }
2181
2182 static void adv76xx_log_infoframes(struct v4l2_subdev *sd)
2183 {
2184         int i;
2185
2186         if (!is_hdmi(sd)) {
2187                 v4l2_info(sd, "receive DVI-D signal, no infoframes\n");
2188                 return;
2189         }
2190
2191         for (i = 0; i < ARRAY_SIZE(adv76xx_cri); i++) {
2192                 union hdmi_infoframe frame;
2193                 struct i2c_client *client = v4l2_get_subdevdata(sd);
2194
2195                 if (adv76xx_read_infoframe(sd, i, &frame))
2196                         return;
2197                 hdmi_infoframe_log(KERN_INFO, &client->dev, &frame);
2198         }
2199 }
2200
2201 static int adv76xx_log_status(struct v4l2_subdev *sd)
2202 {
2203         struct adv76xx_state *state = to_state(sd);
2204         const struct adv76xx_chip_info *info = state->info;
2205         struct v4l2_dv_timings timings;
2206         struct stdi_readback stdi;
2207         u8 reg_io_0x02 = io_read(sd, 0x02);
2208         u8 edid_enabled;
2209         u8 cable_det;
2210
2211         static const char * const csc_coeff_sel_rb[16] = {
2212                 "bypassed", "YPbPr601 -> RGB", "reserved", "YPbPr709 -> RGB",
2213                 "reserved", "RGB -> YPbPr601", "reserved", "RGB -> YPbPr709",
2214                 "reserved", "YPbPr709 -> YPbPr601", "YPbPr601 -> YPbPr709",
2215                 "reserved", "reserved", "reserved", "reserved", "manual"
2216         };
2217         static const char * const input_color_space_txt[16] = {
2218                 "RGB limited range (16-235)", "RGB full range (0-255)",
2219                 "YCbCr Bt.601 (16-235)", "YCbCr Bt.709 (16-235)",
2220                 "xvYCC Bt.601", "xvYCC Bt.709",
2221                 "YCbCr Bt.601 (0-255)", "YCbCr Bt.709 (0-255)",
2222                 "invalid", "invalid", "invalid", "invalid", "invalid",
2223                 "invalid", "invalid", "automatic"
2224         };
2225         static const char * const hdmi_color_space_txt[16] = {
2226                 "RGB limited range (16-235)", "RGB full range (0-255)",
2227                 "YCbCr Bt.601 (16-235)", "YCbCr Bt.709 (16-235)",
2228                 "xvYCC Bt.601", "xvYCC Bt.709",
2229                 "YCbCr Bt.601 (0-255)", "YCbCr Bt.709 (0-255)",
2230                 "sYCC", "Adobe YCC 601", "AdobeRGB", "invalid", "invalid",
2231                 "invalid", "invalid", "invalid"
2232         };
2233         static const char * const rgb_quantization_range_txt[] = {
2234                 "Automatic",
2235                 "RGB limited range (16-235)",
2236                 "RGB full range (0-255)",
2237         };
2238         static const char * const deep_color_mode_txt[4] = {
2239                 "8-bits per channel",
2240                 "10-bits per channel",
2241                 "12-bits per channel",
2242                 "16-bits per channel (not supported)"
2243         };
2244
2245         v4l2_info(sd, "-----Chip status-----\n");
2246         v4l2_info(sd, "Chip power: %s\n", no_power(sd) ? "off" : "on");
2247         edid_enabled = rep_read(sd, info->edid_status_reg);
2248         v4l2_info(sd, "EDID enabled port A: %s, B: %s, C: %s, D: %s\n",
2249                         ((edid_enabled & 0x01) ? "Yes" : "No"),
2250                         ((edid_enabled & 0x02) ? "Yes" : "No"),
2251                         ((edid_enabled & 0x04) ? "Yes" : "No"),
2252                         ((edid_enabled & 0x08) ? "Yes" : "No"));
2253         v4l2_info(sd, "CEC: %s\n", !!(cec_read(sd, 0x2a) & 0x01) ?
2254                         "enabled" : "disabled");
2255
2256         v4l2_info(sd, "-----Signal status-----\n");
2257         cable_det = info->read_cable_det(sd);
2258         v4l2_info(sd, "Cable detected (+5V power) port A: %s, B: %s, C: %s, D: %s\n",
2259                         ((cable_det & 0x01) ? "Yes" : "No"),
2260                         ((cable_det & 0x02) ? "Yes" : "No"),
2261                         ((cable_det & 0x04) ? "Yes" : "No"),
2262                         ((cable_det & 0x08) ? "Yes" : "No"));
2263         v4l2_info(sd, "TMDS signal detected: %s\n",
2264                         no_signal_tmds(sd) ? "false" : "true");
2265         v4l2_info(sd, "TMDS signal locked: %s\n",
2266                         no_lock_tmds(sd) ? "false" : "true");
2267         v4l2_info(sd, "SSPD locked: %s\n", no_lock_sspd(sd) ? "false" : "true");
2268         v4l2_info(sd, "STDI locked: %s\n", no_lock_stdi(sd) ? "false" : "true");
2269         v4l2_info(sd, "CP locked: %s\n", no_lock_cp(sd) ? "false" : "true");
2270         v4l2_info(sd, "CP free run: %s\n",
2271                         (in_free_run(sd)) ? "on" : "off");
2272         v4l2_info(sd, "Prim-mode = 0x%x, video std = 0x%x, v_freq = 0x%x\n",
2273                         io_read(sd, 0x01) & 0x0f, io_read(sd, 0x00) & 0x3f,
2274                         (io_read(sd, 0x01) & 0x70) >> 4);
2275
2276         v4l2_info(sd, "-----Video Timings-----\n");
2277         if (read_stdi(sd, &stdi))
2278                 v4l2_info(sd, "STDI: not locked\n");
2279         else
2280                 v4l2_info(sd, "STDI: lcf (frame height - 1) = %d, bl = %d, lcvs (vsync) = %d, %s, %chsync, %cvsync\n",
2281                                 stdi.lcf, stdi.bl, stdi.lcvs,
2282                                 stdi.interlaced ? "interlaced" : "progressive",
2283                                 stdi.hs_pol, stdi.vs_pol);
2284         if (adv76xx_query_dv_timings(sd, &timings))
2285                 v4l2_info(sd, "No video detected\n");
2286         else
2287                 v4l2_print_dv_timings(sd->name, "Detected format: ",
2288                                       &timings, true);
2289         v4l2_print_dv_timings(sd->name, "Configured format: ",
2290                               &state->timings, true);
2291
2292         if (no_signal(sd))
2293                 return 0;
2294
2295         v4l2_info(sd, "-----Color space-----\n");
2296         v4l2_info(sd, "RGB quantization range ctrl: %s\n",
2297                         rgb_quantization_range_txt[state->rgb_quantization_range]);
2298         v4l2_info(sd, "Input color space: %s\n",
2299                         input_color_space_txt[reg_io_0x02 >> 4]);
2300         v4l2_info(sd, "Output color space: %s %s, saturator %s, alt-gamma %s\n",
2301                         (reg_io_0x02 & 0x02) ? "RGB" : "YCbCr",
2302                         (reg_io_0x02 & 0x04) ? "(16-235)" : "(0-255)",
2303                         (((reg_io_0x02 >> 2) & 0x01) ^ (reg_io_0x02 & 0x01)) ?
2304                                 "enabled" : "disabled",
2305                         (reg_io_0x02 & 0x08) ? "enabled" : "disabled");
2306         v4l2_info(sd, "Color space conversion: %s\n",
2307                         csc_coeff_sel_rb[cp_read(sd, info->cp_csc) >> 4]);
2308
2309         if (!is_digital_input(sd))
2310                 return 0;
2311
2312         v4l2_info(sd, "-----%s status-----\n", is_hdmi(sd) ? "HDMI" : "DVI-D");
2313         v4l2_info(sd, "Digital video port selected: %c\n",
2314                         (hdmi_read(sd, 0x00) & 0x03) + 'A');
2315         v4l2_info(sd, "HDCP encrypted content: %s\n",
2316                         (hdmi_read(sd, 0x05) & 0x40) ? "true" : "false");
2317         v4l2_info(sd, "HDCP keys read: %s%s\n",
2318                         (hdmi_read(sd, 0x04) & 0x20) ? "yes" : "no",
2319                         (hdmi_read(sd, 0x04) & 0x10) ? "ERROR" : "");
2320         if (is_hdmi(sd)) {
2321                 bool audio_pll_locked = hdmi_read(sd, 0x04) & 0x01;
2322                 bool audio_sample_packet_detect = hdmi_read(sd, 0x18) & 0x01;
2323                 bool audio_mute = io_read(sd, 0x65) & 0x40;
2324
2325                 v4l2_info(sd, "Audio: pll %s, samples %s, %s\n",
2326                                 audio_pll_locked ? "locked" : "not locked",
2327                                 audio_sample_packet_detect ? "detected" : "not detected",
2328                                 audio_mute ? "muted" : "enabled");
2329                 if (audio_pll_locked && audio_sample_packet_detect) {
2330                         v4l2_info(sd, "Audio format: %s\n",
2331                                         (hdmi_read(sd, 0x07) & 0x20) ? "multi-channel" : "stereo");
2332                 }
2333                 v4l2_info(sd, "Audio CTS: %u\n", (hdmi_read(sd, 0x5b) << 12) +
2334                                 (hdmi_read(sd, 0x5c) << 8) +
2335                                 (hdmi_read(sd, 0x5d) & 0xf0));
2336                 v4l2_info(sd, "Audio N: %u\n", ((hdmi_read(sd, 0x5d) & 0x0f) << 16) +
2337                                 (hdmi_read(sd, 0x5e) << 8) +
2338                                 hdmi_read(sd, 0x5f));
2339                 v4l2_info(sd, "AV Mute: %s\n", (hdmi_read(sd, 0x04) & 0x40) ? "on" : "off");
2340
2341                 v4l2_info(sd, "Deep color mode: %s\n", deep_color_mode_txt[(hdmi_read(sd, 0x0b) & 0x60) >> 5]);
2342                 v4l2_info(sd, "HDMI colorspace: %s\n", hdmi_color_space_txt[hdmi_read(sd, 0x53) & 0xf]);
2343
2344                 adv76xx_log_infoframes(sd);
2345         }
2346
2347         return 0;
2348 }
2349
2350 /* ----------------------------------------------------------------------- */
2351
2352 static const struct v4l2_ctrl_ops adv76xx_ctrl_ops = {
2353         .s_ctrl = adv76xx_s_ctrl,
2354 };
2355
2356 static const struct v4l2_subdev_core_ops adv76xx_core_ops = {
2357         .log_status = adv76xx_log_status,
2358         .interrupt_service_routine = adv76xx_isr,
2359 #ifdef CONFIG_VIDEO_ADV_DEBUG
2360         .g_register = adv76xx_g_register,
2361         .s_register = adv76xx_s_register,
2362 #endif
2363 };
2364
2365 static const struct v4l2_subdev_video_ops adv76xx_video_ops = {
2366         .s_routing = adv76xx_s_routing,
2367         .g_input_status = adv76xx_g_input_status,
2368         .s_dv_timings = adv76xx_s_dv_timings,
2369         .g_dv_timings = adv76xx_g_dv_timings,
2370         .query_dv_timings = adv76xx_query_dv_timings,
2371 };
2372
2373 static const struct v4l2_subdev_pad_ops adv76xx_pad_ops = {
2374         .enum_mbus_code = adv76xx_enum_mbus_code,
2375         .get_fmt = adv76xx_get_format,
2376         .set_fmt = adv76xx_set_format,
2377         .get_edid = adv76xx_get_edid,
2378         .set_edid = adv76xx_set_edid,
2379         .dv_timings_cap = adv76xx_dv_timings_cap,
2380         .enum_dv_timings = adv76xx_enum_dv_timings,
2381 };
2382
2383 static const struct v4l2_subdev_ops adv76xx_ops = {
2384         .core = &adv76xx_core_ops,
2385         .video = &adv76xx_video_ops,
2386         .pad = &adv76xx_pad_ops,
2387 };
2388
2389 /* -------------------------- custom ctrls ---------------------------------- */
2390
2391 static const struct v4l2_ctrl_config adv7604_ctrl_analog_sampling_phase = {
2392         .ops = &adv76xx_ctrl_ops,
2393         .id = V4L2_CID_ADV_RX_ANALOG_SAMPLING_PHASE,
2394         .name = "Analog Sampling Phase",
2395         .type = V4L2_CTRL_TYPE_INTEGER,
2396         .min = 0,
2397         .max = 0x1f,
2398         .step = 1,
2399         .def = 0,
2400 };
2401
2402 static const struct v4l2_ctrl_config adv76xx_ctrl_free_run_color_manual = {
2403         .ops = &adv76xx_ctrl_ops,
2404         .id = V4L2_CID_ADV_RX_FREE_RUN_COLOR_MANUAL,
2405         .name = "Free Running Color, Manual",
2406         .type = V4L2_CTRL_TYPE_BOOLEAN,
2407         .min = false,
2408         .max = true,
2409         .step = 1,
2410         .def = false,
2411 };
2412
2413 static const struct v4l2_ctrl_config adv76xx_ctrl_free_run_color = {
2414         .ops = &adv76xx_ctrl_ops,
2415         .id = V4L2_CID_ADV_RX_FREE_RUN_COLOR,
2416         .name = "Free Running Color",
2417         .type = V4L2_CTRL_TYPE_INTEGER,
2418         .min = 0x0,
2419         .max = 0xffffff,
2420         .step = 0x1,
2421         .def = 0x0,
2422 };
2423
2424 /* ----------------------------------------------------------------------- */
2425
2426 static int adv76xx_core_init(struct v4l2_subdev *sd)
2427 {
2428         struct adv76xx_state *state = to_state(sd);
2429         const struct adv76xx_chip_info *info = state->info;
2430         struct adv76xx_platform_data *pdata = &state->pdata;
2431
2432         hdmi_write(sd, 0x48,
2433                 (pdata->disable_pwrdnb ? 0x80 : 0) |
2434                 (pdata->disable_cable_det_rst ? 0x40 : 0));
2435
2436         disable_input(sd);
2437
2438         if (pdata->default_input >= 0 &&
2439             pdata->default_input < state->source_pad) {
2440                 state->selected_input = pdata->default_input;
2441                 select_input(sd);
2442                 enable_input(sd);
2443         }
2444
2445         /* power */
2446         io_write(sd, 0x0c, 0x42);   /* Power up part and power down VDP */
2447         io_write(sd, 0x0b, 0x44);   /* Power down ESDP block */
2448         cp_write(sd, 0xcf, 0x01);   /* Power down macrovision */
2449
2450         /* video format */
2451         io_write_clr_set(sd, 0x02, 0x0f,
2452                         pdata->alt_gamma << 3 |
2453                         pdata->op_656_range << 2 |
2454                         pdata->alt_data_sat << 0);
2455         io_write_clr_set(sd, 0x05, 0x0e, pdata->blank_data << 3 |
2456                         pdata->insert_av_codes << 2 |
2457                         pdata->replicate_av_codes << 1);
2458         adv76xx_setup_format(state);
2459
2460         cp_write(sd, 0x69, 0x30);   /* Enable CP CSC */
2461
2462         /* VS, HS polarities */
2463         io_write(sd, 0x06, 0xa0 | pdata->inv_vs_pol << 2 |
2464                  pdata->inv_hs_pol << 1 | pdata->inv_llc_pol);
2465
2466         /* Adjust drive strength */
2467         io_write(sd, 0x14, 0x40 | pdata->dr_str_data << 4 |
2468                                 pdata->dr_str_clk << 2 |
2469                                 pdata->dr_str_sync);
2470
2471         cp_write(sd, 0xba, (pdata->hdmi_free_run_mode << 1) | 0x01); /* HDMI free run */
2472         cp_write(sd, 0xf3, 0xdc); /* Low threshold to enter/exit free run mode */
2473         cp_write(sd, 0xf9, 0x23); /*  STDI ch. 1 - LCVS change threshold -
2474                                       ADI recommended setting [REF_01, c. 2.3.3] */
2475         cp_write(sd, 0x45, 0x23); /*  STDI ch. 2 - LCVS change threshold -
2476                                       ADI recommended setting [REF_01, c. 2.3.3] */
2477         cp_write(sd, 0xc9, 0x2d); /* use prim_mode and vid_std as free run resolution
2478                                      for digital formats */
2479
2480         /* HDMI audio */
2481         hdmi_write_clr_set(sd, 0x15, 0x03, 0x03); /* Mute on FIFO over-/underflow [REF_01, c. 1.2.18] */
2482         hdmi_write_clr_set(sd, 0x1a, 0x0e, 0x08); /* Wait 1 s before unmute */
2483         hdmi_write_clr_set(sd, 0x68, 0x06, 0x06); /* FIFO reset on over-/underflow [REF_01, c. 1.2.19] */
2484
2485         /* TODO from platform data */
2486         afe_write(sd, 0xb5, 0x01);  /* Setting MCLK to 256Fs */
2487
2488         if (adv76xx_has_afe(state)) {
2489                 afe_write(sd, 0x02, pdata->ain_sel); /* Select analog input muxing mode */
2490                 io_write_clr_set(sd, 0x30, 1 << 4, pdata->output_bus_lsb_to_msb << 4);
2491         }
2492
2493         /* interrupts */
2494         io_write(sd, 0x40, 0xc0 | pdata->int1_config); /* Configure INT1 */
2495         io_write(sd, 0x46, 0x98); /* Enable SSPD, STDI and CP unlocked interrupts */
2496         io_write(sd, 0x6e, info->fmt_change_digital_mask); /* Enable V_LOCKED and DE_REGEN_LCK interrupts */
2497         io_write(sd, 0x73, info->cable_det_mask); /* Enable cable detection (+5v) interrupts */
2498         info->setup_irqs(sd);
2499
2500         return v4l2_ctrl_handler_setup(sd->ctrl_handler);
2501 }
2502
2503 static void adv7604_setup_irqs(struct v4l2_subdev *sd)
2504 {
2505         io_write(sd, 0x41, 0xd7); /* STDI irq for any change, disable INT2 */
2506 }
2507
2508 static void adv7611_setup_irqs(struct v4l2_subdev *sd)
2509 {
2510         io_write(sd, 0x41, 0xd0); /* STDI irq for any change, disable INT2 */
2511 }
2512
2513 static void adv76xx_unregister_clients(struct adv76xx_state *state)
2514 {
2515         unsigned int i;
2516
2517         for (i = 1; i < ARRAY_SIZE(state->i2c_clients); ++i) {
2518                 if (state->i2c_clients[i])
2519                         i2c_unregister_device(state->i2c_clients[i]);
2520         }
2521 }
2522
2523 static struct i2c_client *adv76xx_dummy_client(struct v4l2_subdev *sd,
2524                                                         u8 addr, u8 io_reg)
2525 {
2526         struct i2c_client *client = v4l2_get_subdevdata(sd);
2527
2528         if (addr)
2529                 io_write(sd, io_reg, addr << 1);
2530         return i2c_new_dummy(client->adapter, io_read(sd, io_reg) >> 1);
2531 }
2532
2533 static const struct adv76xx_reg_seq adv7604_recommended_settings_afe[] = {
2534         /* reset ADI recommended settings for HDMI: */
2535         /* "ADV7604 Register Settings Recommendations (rev. 2.5, June 2010)" p. 4. */
2536         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x0d), 0x04 }, /* HDMI filter optimization */
2537         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x0d), 0x04 }, /* HDMI filter optimization */
2538         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x3d), 0x00 }, /* DDC bus active pull-up control */
2539         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x3e), 0x74 }, /* TMDS PLL optimization */
2540         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x4e), 0x3b }, /* TMDS PLL optimization */
2541         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x57), 0x74 }, /* TMDS PLL optimization */
2542         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x58), 0x63 }, /* TMDS PLL optimization */
2543         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x8d), 0x18 }, /* equaliser */
2544         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x8e), 0x34 }, /* equaliser */
2545         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x93), 0x88 }, /* equaliser */
2546         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x94), 0x2e }, /* equaliser */
2547         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x96), 0x00 }, /* enable automatic EQ changing */
2548
2549         /* set ADI recommended settings for digitizer */
2550         /* "ADV7604 Register Settings Recommendations (rev. 2.5, June 2010)" p. 17. */
2551         { ADV76XX_REG(ADV76XX_PAGE_AFE, 0x12), 0x7b }, /* ADC noise shaping filter controls */
2552         { ADV76XX_REG(ADV76XX_PAGE_AFE, 0x0c), 0x1f }, /* CP core gain controls */
2553         { ADV76XX_REG(ADV76XX_PAGE_CP, 0x3e), 0x04 }, /* CP core pre-gain control */
2554         { ADV76XX_REG(ADV76XX_PAGE_CP, 0xc3), 0x39 }, /* CP coast control. Graphics mode */
2555         { ADV76XX_REG(ADV76XX_PAGE_CP, 0x40), 0x5c }, /* CP core pre-gain control. Graphics mode */
2556
2557         { ADV76XX_REG_SEQ_TERM, 0 },
2558 };
2559
2560 static const struct adv76xx_reg_seq adv7604_recommended_settings_hdmi[] = {
2561         /* set ADI recommended settings for HDMI: */
2562         /* "ADV7604 Register Settings Recommendations (rev. 2.5, June 2010)" p. 4. */
2563         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x0d), 0x84 }, /* HDMI filter optimization */
2564         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x3d), 0x10 }, /* DDC bus active pull-up control */
2565         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x3e), 0x39 }, /* TMDS PLL optimization */
2566         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x4e), 0x3b }, /* TMDS PLL optimization */
2567         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x57), 0xb6 }, /* TMDS PLL optimization */
2568         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x58), 0x03 }, /* TMDS PLL optimization */
2569         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x8d), 0x18 }, /* equaliser */
2570         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x8e), 0x34 }, /* equaliser */
2571         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x93), 0x8b }, /* equaliser */
2572         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x94), 0x2d }, /* equaliser */
2573         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x96), 0x01 }, /* enable automatic EQ changing */
2574
2575         /* reset ADI recommended settings for digitizer */
2576         /* "ADV7604 Register Settings Recommendations (rev. 2.5, June 2010)" p. 17. */
2577         { ADV76XX_REG(ADV76XX_PAGE_AFE, 0x12), 0xfb }, /* ADC noise shaping filter controls */
2578         { ADV76XX_REG(ADV76XX_PAGE_AFE, 0x0c), 0x0d }, /* CP core gain controls */
2579
2580         { ADV76XX_REG_SEQ_TERM, 0 },
2581 };
2582
2583 static const struct adv76xx_reg_seq adv7611_recommended_settings_hdmi[] = {
2584         /* ADV7611 Register Settings Recommendations Rev 1.5, May 2014 */
2585         { ADV76XX_REG(ADV76XX_PAGE_CP, 0x6c), 0x00 },
2586         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x9b), 0x03 },
2587         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x6f), 0x08 },
2588         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x85), 0x1f },
2589         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x87), 0x70 },
2590         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x57), 0xda },
2591         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x58), 0x01 },
2592         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x03), 0x98 },
2593         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x4c), 0x44 },
2594         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x8d), 0x04 },
2595         { ADV76XX_REG(ADV76XX_PAGE_HDMI, 0x8e), 0x1e },
2596
2597         { ADV76XX_REG_SEQ_TERM, 0 },
2598 };
2599
2600 static const struct adv76xx_chip_info adv76xx_chip_info[] = {
2601         [ADV7604] = {
2602                 .type = ADV7604,
2603                 .has_afe = true,
2604                 .max_port = ADV7604_PAD_VGA_COMP,
2605                 .num_dv_ports = 4,
2606                 .edid_enable_reg = 0x77,
2607                 .edid_status_reg = 0x7d,
2608                 .lcf_reg = 0xb3,
2609                 .tdms_lock_mask = 0xe0,
2610                 .cable_det_mask = 0x1e,
2611                 .fmt_change_digital_mask = 0xc1,
2612                 .cp_csc = 0xfc,
2613                 .formats = adv7604_formats,
2614                 .nformats = ARRAY_SIZE(adv7604_formats),
2615                 .set_termination = adv7604_set_termination,
2616                 .setup_irqs = adv7604_setup_irqs,
2617                 .read_hdmi_pixelclock = adv7604_read_hdmi_pixelclock,
2618                 .read_cable_det = adv7604_read_cable_det,
2619                 .recommended_settings = {
2620                     [0] = adv7604_recommended_settings_afe,
2621                     [1] = adv7604_recommended_settings_hdmi,
2622                 },
2623                 .num_recommended_settings = {
2624                     [0] = ARRAY_SIZE(adv7604_recommended_settings_afe),
2625                     [1] = ARRAY_SIZE(adv7604_recommended_settings_hdmi),
2626                 },
2627                 .page_mask = BIT(ADV76XX_PAGE_IO) | BIT(ADV7604_PAGE_AVLINK) |
2628                         BIT(ADV76XX_PAGE_CEC) | BIT(ADV76XX_PAGE_INFOFRAME) |
2629                         BIT(ADV7604_PAGE_ESDP) | BIT(ADV7604_PAGE_DPP) |
2630                         BIT(ADV76XX_PAGE_AFE) | BIT(ADV76XX_PAGE_REP) |
2631                         BIT(ADV76XX_PAGE_EDID) | BIT(ADV76XX_PAGE_HDMI) |
2632                         BIT(ADV76XX_PAGE_TEST) | BIT(ADV76XX_PAGE_CP) |
2633                         BIT(ADV7604_PAGE_VDP),
2634                 .linewidth_mask = 0xfff,
2635                 .field0_height_mask = 0xfff,
2636                 .field1_height_mask = 0xfff,
2637                 .hfrontporch_mask = 0x3ff,
2638                 .hsync_mask = 0x3ff,
2639                 .hbackporch_mask = 0x3ff,
2640                 .field0_vfrontporch_mask = 0x1fff,
2641                 .field0_vsync_mask = 0x1fff,
2642                 .field0_vbackporch_mask = 0x1fff,
2643                 .field1_vfrontporch_mask = 0x1fff,
2644                 .field1_vsync_mask = 0x1fff,
2645                 .field1_vbackporch_mask = 0x1fff,
2646         },
2647         [ADV7611] = {
2648                 .type = ADV7611,
2649                 .has_afe = false,
2650                 .max_port = ADV76XX_PAD_HDMI_PORT_A,
2651                 .num_dv_ports = 1,
2652                 .edid_enable_reg = 0x74,
2653                 .edid_status_reg = 0x76,
2654                 .lcf_reg = 0xa3,
2655                 .tdms_lock_mask = 0x43,
2656                 .cable_det_mask = 0x01,
2657                 .fmt_change_digital_mask = 0x03,
2658                 .cp_csc = 0xf4,
2659                 .formats = adv7611_formats,
2660                 .nformats = ARRAY_SIZE(adv7611_formats),
2661                 .set_termination = adv7611_set_termination,
2662                 .setup_irqs = adv7611_setup_irqs,
2663                 .read_hdmi_pixelclock = adv7611_read_hdmi_pixelclock,
2664                 .read_cable_det = adv7611_read_cable_det,
2665                 .recommended_settings = {
2666                     [1] = adv7611_recommended_settings_hdmi,
2667                 },
2668                 .num_recommended_settings = {
2669                     [1] = ARRAY_SIZE(adv7611_recommended_settings_hdmi),
2670                 },
2671                 .page_mask = BIT(ADV76XX_PAGE_IO) | BIT(ADV76XX_PAGE_CEC) |
2672                         BIT(ADV76XX_PAGE_INFOFRAME) | BIT(ADV76XX_PAGE_AFE) |
2673                         BIT(ADV76XX_PAGE_REP) |  BIT(ADV76XX_PAGE_EDID) |
2674                         BIT(ADV76XX_PAGE_HDMI) | BIT(ADV76XX_PAGE_CP),
2675                 .linewidth_mask = 0x1fff,
2676                 .field0_height_mask = 0x1fff,
2677                 .field1_height_mask = 0x1fff,
2678                 .hfrontporch_mask = 0x1fff,
2679                 .hsync_mask = 0x1fff,
2680                 .hbackporch_mask = 0x1fff,
2681                 .field0_vfrontporch_mask = 0x3fff,
2682                 .field0_vsync_mask = 0x3fff,
2683                 .field0_vbackporch_mask = 0x3fff,
2684                 .field1_vfrontporch_mask = 0x3fff,
2685                 .field1_vsync_mask = 0x3fff,
2686                 .field1_vbackporch_mask = 0x3fff,
2687         },
2688 };
2689
2690 static const struct i2c_device_id adv76xx_i2c_id[] = {
2691         { "adv7604", (kernel_ulong_t)&adv76xx_chip_info[ADV7604] },
2692         { "adv7611", (kernel_ulong_t)&adv76xx_chip_info[ADV7611] },
2693         { }
2694 };
2695 MODULE_DEVICE_TABLE(i2c, adv76xx_i2c_id);
2696
2697 static const struct of_device_id adv76xx_of_id[] __maybe_unused = {
2698         { .compatible = "adi,adv7611", .data = &adv76xx_chip_info[ADV7611] },
2699         { }
2700 };
2701 MODULE_DEVICE_TABLE(of, adv76xx_of_id);
2702
2703 static int adv76xx_parse_dt(struct adv76xx_state *state)
2704 {
2705         struct v4l2_of_endpoint bus_cfg;
2706         struct device_node *endpoint;
2707         struct device_node *np;
2708         unsigned int flags;
2709
2710         np = state->i2c_clients[ADV76XX_PAGE_IO]->dev.of_node;
2711
2712         /* Parse the endpoint. */
2713         endpoint = of_graph_get_next_endpoint(np, NULL);
2714         if (!endpoint)
2715                 return -EINVAL;
2716
2717         v4l2_of_parse_endpoint(endpoint, &bus_cfg);
2718         of_node_put(endpoint);
2719
2720         flags = bus_cfg.bus.parallel.flags;
2721
2722         if (flags & V4L2_MBUS_HSYNC_ACTIVE_HIGH)
2723                 state->pdata.inv_hs_pol = 1;
2724
2725         if (flags & V4L2_MBUS_VSYNC_ACTIVE_HIGH)
2726                 state->pdata.inv_vs_pol = 1;
2727
2728         if (flags & V4L2_MBUS_PCLK_SAMPLE_RISING)
2729                 state->pdata.inv_llc_pol = 1;
2730
2731         if (bus_cfg.bus_type == V4L2_MBUS_BT656) {
2732                 state->pdata.insert_av_codes = 1;
2733                 state->pdata.op_656_range = 1;
2734         }
2735
2736         /* Disable the interrupt for now as no DT-based board uses it. */
2737         state->pdata.int1_config = ADV76XX_INT1_CONFIG_DISABLED;
2738
2739         /* Use the default I2C addresses. */
2740         state->pdata.i2c_addresses[ADV7604_PAGE_AVLINK] = 0x42;
2741         state->pdata.i2c_addresses[ADV76XX_PAGE_CEC] = 0x40;
2742         state->pdata.i2c_addresses[ADV76XX_PAGE_INFOFRAME] = 0x3e;
2743         state->pdata.i2c_addresses[ADV7604_PAGE_ESDP] = 0x38;
2744         state->pdata.i2c_addresses[ADV7604_PAGE_DPP] = 0x3c;
2745         state->pdata.i2c_addresses[ADV76XX_PAGE_AFE] = 0x26;
2746         state->pdata.i2c_addresses[ADV76XX_PAGE_REP] = 0x32;
2747         state->pdata.i2c_addresses[ADV76XX_PAGE_EDID] = 0x36;
2748         state->pdata.i2c_addresses[ADV76XX_PAGE_HDMI] = 0x34;
2749         state->pdata.i2c_addresses[ADV76XX_PAGE_TEST] = 0x30;
2750         state->pdata.i2c_addresses[ADV76XX_PAGE_CP] = 0x22;
2751         state->pdata.i2c_addresses[ADV7604_PAGE_VDP] = 0x24;
2752
2753         /* Hardcode the remaining platform data fields. */
2754         state->pdata.disable_pwrdnb = 0;
2755         state->pdata.disable_cable_det_rst = 0;
2756         state->pdata.default_input = -1;
2757         state->pdata.blank_data = 1;
2758         state->pdata.alt_data_sat = 1;
2759         state->pdata.op_format_mode_sel = ADV7604_OP_FORMAT_MODE0;
2760         state->pdata.bus_order = ADV7604_BUS_ORDER_RGB;
2761
2762         return 0;
2763 }
2764
2765 static int adv76xx_probe(struct i2c_client *client,
2766                          const struct i2c_device_id *id)
2767 {
2768         static const struct v4l2_dv_timings cea640x480 =
2769                 V4L2_DV_BT_CEA_640X480P59_94;
2770         struct adv76xx_state *state;
2771         struct v4l2_ctrl_handler *hdl;
2772         struct v4l2_subdev *sd;
2773         unsigned int i;
2774         u16 val;
2775         int err;
2776
2777         /* Check if the adapter supports the needed features */
2778         if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
2779                 return -EIO;
2780         v4l_dbg(1, debug, client, "detecting adv76xx client on address 0x%x\n",
2781                         client->addr << 1);
2782
2783         state = devm_kzalloc(&client->dev, sizeof(*state), GFP_KERNEL);
2784         if (!state) {
2785                 v4l_err(client, "Could not allocate adv76xx_state memory!\n");
2786                 return -ENOMEM;
2787         }
2788
2789         state->i2c_clients[ADV76XX_PAGE_IO] = client;
2790
2791         /* initialize variables */
2792         state->restart_stdi_once = true;
2793         state->selected_input = ~0;
2794
2795         if (IS_ENABLED(CONFIG_OF) && client->dev.of_node) {
2796                 const struct of_device_id *oid;
2797
2798                 oid = of_match_node(adv76xx_of_id, client->dev.of_node);
2799                 state->info = oid->data;
2800
2801                 err = adv76xx_parse_dt(state);
2802                 if (err < 0) {
2803                         v4l_err(client, "DT parsing error\n");
2804                         return err;
2805                 }
2806         } else if (client->dev.platform_data) {
2807                 struct adv76xx_platform_data *pdata = client->dev.platform_data;
2808
2809                 state->info = (const struct adv76xx_chip_info *)id->driver_data;
2810                 state->pdata = *pdata;
2811         } else {
2812                 v4l_err(client, "No platform data!\n");
2813                 return -ENODEV;
2814         }
2815
2816         /* Request GPIOs. */
2817         for (i = 0; i < state->info->num_dv_ports; ++i) {
2818                 state->hpd_gpio[i] =
2819                         devm_gpiod_get_index_optional(&client->dev, "hpd", i,
2820                                                       GPIOD_OUT_LOW);
2821                 if (IS_ERR(state->hpd_gpio[i]))
2822                         return PTR_ERR(state->hpd_gpio[i]);
2823
2824                 if (state->hpd_gpio[i])
2825                         v4l_info(client, "Handling HPD %u GPIO\n", i);
2826         }
2827
2828         state->timings = cea640x480;
2829         state->format = adv76xx_format_info(state, MEDIA_BUS_FMT_YUYV8_2X8);
2830
2831         sd = &state->sd;
2832         v4l2_i2c_subdev_init(sd, client, &adv76xx_ops);
2833         snprintf(sd->name, sizeof(sd->name), "%s %d-%04x",
2834                 id->name, i2c_adapter_id(client->adapter),
2835                 client->addr);
2836         sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
2837
2838         /*
2839          * Verify that the chip is present. On ADV7604 the RD_INFO register only
2840          * identifies the revision, while on ADV7611 it identifies the model as
2841          * well. Use the HDMI slave address on ADV7604 and RD_INFO on ADV7611.
2842          */
2843         if (state->info->type == ADV7604) {
2844                 val = adv_smbus_read_byte_data_check(client, 0xfb, false);
2845                 if (val != 0x68) {
2846                         v4l2_info(sd, "not an adv7604 on address 0x%x\n",
2847                                         client->addr << 1);
2848                         return -ENODEV;
2849                 }
2850         } else {
2851                 val = (adv_smbus_read_byte_data_check(client, 0xea, false) << 8)
2852                     | (adv_smbus_read_byte_data_check(client, 0xeb, false) << 0);
2853                 if (val != 0x2051) {
2854                         v4l2_info(sd, "not an adv7611 on address 0x%x\n",
2855                                         client->addr << 1);
2856                         return -ENODEV;
2857                 }
2858         }
2859
2860         /* control handlers */
2861         hdl = &state->hdl;
2862         v4l2_ctrl_handler_init(hdl, adv76xx_has_afe(state) ? 9 : 8);
2863
2864         v4l2_ctrl_new_std(hdl, &adv76xx_ctrl_ops,
2865                         V4L2_CID_BRIGHTNESS, -128, 127, 1, 0);
2866         v4l2_ctrl_new_std(hdl, &adv76xx_ctrl_ops,
2867                         V4L2_CID_CONTRAST, 0, 255, 1, 128);
2868         v4l2_ctrl_new_std(hdl, &adv76xx_ctrl_ops,
2869                         V4L2_CID_SATURATION, 0, 255, 1, 128);
2870         v4l2_ctrl_new_std(hdl, &adv76xx_ctrl_ops,
2871                         V4L2_CID_HUE, 0, 128, 1, 0);
2872
2873         /* private controls */
2874         state->detect_tx_5v_ctrl = v4l2_ctrl_new_std(hdl, NULL,
2875                         V4L2_CID_DV_RX_POWER_PRESENT, 0,
2876                         (1 << state->info->num_dv_ports) - 1, 0, 0);
2877         state->rgb_quantization_range_ctrl =
2878                 v4l2_ctrl_new_std_menu(hdl, &adv76xx_ctrl_ops,
2879                         V4L2_CID_DV_RX_RGB_RANGE, V4L2_DV_RGB_RANGE_FULL,
2880                         0, V4L2_DV_RGB_RANGE_AUTO);
2881
2882         /* custom controls */
2883         if (adv76xx_has_afe(state))
2884                 state->analog_sampling_phase_ctrl =
2885                         v4l2_ctrl_new_custom(hdl, &adv7604_ctrl_analog_sampling_phase, NULL);
2886         state->free_run_color_manual_ctrl =
2887                 v4l2_ctrl_new_custom(hdl, &adv76xx_ctrl_free_run_color_manual, NULL);
2888         state->free_run_color_ctrl =
2889                 v4l2_ctrl_new_custom(hdl, &adv76xx_ctrl_free_run_color, NULL);
2890
2891         sd->ctrl_handler = hdl;
2892         if (hdl->error) {
2893                 err = hdl->error;
2894                 goto err_hdl;
2895         }
2896         state->detect_tx_5v_ctrl->is_private = true;
2897         state->rgb_quantization_range_ctrl->is_private = true;
2898         if (adv76xx_has_afe(state))
2899                 state->analog_sampling_phase_ctrl->is_private = true;
2900         state->free_run_color_manual_ctrl->is_private = true;
2901         state->free_run_color_ctrl->is_private = true;
2902
2903         if (adv76xx_s_detect_tx_5v_ctrl(sd)) {
2904                 err = -ENODEV;
2905                 goto err_hdl;
2906         }
2907
2908         for (i = 1; i < ADV76XX_PAGE_MAX; ++i) {
2909                 if (!(BIT(i) & state->info->page_mask))
2910                         continue;
2911
2912                 state->i2c_clients[i] =
2913                         adv76xx_dummy_client(sd, state->pdata.i2c_addresses[i],
2914                                              0xf2 + i);
2915                 if (state->i2c_clients[i] == NULL) {
2916                         err = -ENOMEM;
2917                         v4l2_err(sd, "failed to create i2c client %u\n", i);
2918                         goto err_i2c;
2919                 }
2920         }
2921
2922         /* work queues */
2923         state->work_queues = create_singlethread_workqueue(client->name);
2924         if (!state->work_queues) {
2925                 v4l2_err(sd, "Could not create work queue\n");
2926                 err = -ENOMEM;
2927                 goto err_i2c;
2928         }
2929
2930         INIT_DELAYED_WORK(&state->delayed_work_enable_hotplug,
2931                         adv76xx_delayed_work_enable_hotplug);
2932
2933         state->source_pad = state->info->num_dv_ports
2934                           + (state->info->has_afe ? 2 : 0);
2935         for (i = 0; i < state->source_pad; ++i)
2936                 state->pads[i].flags = MEDIA_PAD_FL_SINK;
2937         state->pads[state->source_pad].flags = MEDIA_PAD_FL_SOURCE;
2938
2939         err = media_entity_init(&sd->entity, state->source_pad + 1,
2940                                 state->pads, 0);
2941         if (err)
2942                 goto err_work_queues;
2943
2944         err = adv76xx_core_init(sd);
2945         if (err)
2946                 goto err_entity;
2947         v4l2_info(sd, "%s found @ 0x%x (%s)\n", client->name,
2948                         client->addr << 1, client->adapter->name);
2949
2950         err = v4l2_async_register_subdev(sd);
2951         if (err)
2952                 goto err_entity;
2953
2954         return 0;
2955
2956 err_entity:
2957         media_entity_cleanup(&sd->entity);
2958 err_work_queues:
2959         cancel_delayed_work(&state->delayed_work_enable_hotplug);
2960         destroy_workqueue(state->work_queues);
2961 err_i2c:
2962         adv76xx_unregister_clients(state);
2963 err_hdl:
2964         v4l2_ctrl_handler_free(hdl);
2965         return err;
2966 }
2967
2968 /* ----------------------------------------------------------------------- */
2969
2970 static int adv76xx_remove(struct i2c_client *client)
2971 {
2972         struct v4l2_subdev *sd = i2c_get_clientdata(client);
2973         struct adv76xx_state *state = to_state(sd);
2974
2975         cancel_delayed_work(&state->delayed_work_enable_hotplug);
2976         destroy_workqueue(state->work_queues);
2977         v4l2_async_unregister_subdev(sd);
2978         media_entity_cleanup(&sd->entity);
2979         adv76xx_unregister_clients(to_state(sd));
2980         v4l2_ctrl_handler_free(sd->ctrl_handler);
2981         return 0;
2982 }
2983
2984 /* ----------------------------------------------------------------------- */
2985
2986 static struct i2c_driver adv76xx_driver = {
2987         .driver = {
2988                 .owner = THIS_MODULE,
2989                 .name = "adv7604",
2990                 .of_match_table = of_match_ptr(adv76xx_of_id),
2991         },
2992         .probe = adv76xx_probe,
2993         .remove = adv76xx_remove,
2994         .id_table = adv76xx_i2c_id,
2995 };
2996
2997 module_i2c_driver(adv76xx_driver);