drm/bridge: adv7511: Enable connector polling when no interrupt is specified
[linux-2.6-block.git] / drivers / gpu / drm / bridge / adv7511 / adv7511_drv.c
1 /*
2  * Analog Devices ADV7511 HDMI transmitter driver
3  *
4  * Copyright 2012 Analog Devices Inc.
5  *
6  * Licensed under the GPL-2.
7  */
8
9 #include <linux/device.h>
10 #include <linux/gpio/consumer.h>
11 #include <linux/module.h>
12 #include <linux/of_device.h>
13 #include <linux/slab.h>
14
15 #include <drm/drmP.h>
16 #include <drm/drm_atomic.h>
17 #include <drm/drm_atomic_helper.h>
18 #include <drm/drm_edid.h>
19
20 #include "adv7511.h"
21
22 /* ADI recommended values for proper operation. */
23 static const struct reg_sequence adv7511_fixed_registers[] = {
24         { 0x98, 0x03 },
25         { 0x9a, 0xe0 },
26         { 0x9c, 0x30 },
27         { 0x9d, 0x61 },
28         { 0xa2, 0xa4 },
29         { 0xa3, 0xa4 },
30         { 0xe0, 0xd0 },
31         { 0xf9, 0x00 },
32         { 0x55, 0x02 },
33 };
34
35 /* -----------------------------------------------------------------------------
36  * Register access
37  */
38
39 static const uint8_t adv7511_register_defaults[] = {
40         0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 00 */
41         0x00, 0x00, 0x01, 0x0e, 0xbc, 0x18, 0x01, 0x13,
42         0x25, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 10 */
43         0x46, 0x62, 0x04, 0xa8, 0x00, 0x00, 0x1c, 0x84,
44         0x1c, 0xbf, 0x04, 0xa8, 0x1e, 0x70, 0x02, 0x1e, /* 20 */
45         0x00, 0x00, 0x04, 0xa8, 0x08, 0x12, 0x1b, 0xac,
46         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 30 */
47         0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xb0,
48         0x00, 0x50, 0x90, 0x7e, 0x79, 0x70, 0x00, 0x00, /* 40 */
49         0x00, 0xa8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
50         0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x00, 0x00, /* 50 */
51         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
52         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 60 */
53         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
54         0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 70 */
55         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
56         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 80 */
57         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58         0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 90 */
59         0x0b, 0x02, 0x00, 0x18, 0x5a, 0x60, 0x00, 0x00,
60         0x00, 0x00, 0x80, 0x80, 0x08, 0x04, 0x00, 0x00, /* a0 */
61         0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x14,
62         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* b0 */
63         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* c0 */
65         0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x01, 0x04,
66         0x30, 0xff, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, /* d0 */
67         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01,
68         0x80, 0x75, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* e0 */
69         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
70         0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x00, /* f0 */
71         0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
72 };
73
74 static bool adv7511_register_volatile(struct device *dev, unsigned int reg)
75 {
76         switch (reg) {
77         case ADV7511_REG_CHIP_REVISION:
78         case ADV7511_REG_SPDIF_FREQ:
79         case ADV7511_REG_CTS_AUTOMATIC1:
80         case ADV7511_REG_CTS_AUTOMATIC2:
81         case ADV7511_REG_VIC_DETECTED:
82         case ADV7511_REG_VIC_SEND:
83         case ADV7511_REG_AUX_VIC_DETECTED:
84         case ADV7511_REG_STATUS:
85         case ADV7511_REG_GC(1):
86         case ADV7511_REG_INT(0):
87         case ADV7511_REG_INT(1):
88         case ADV7511_REG_PLL_STATUS:
89         case ADV7511_REG_AN(0):
90         case ADV7511_REG_AN(1):
91         case ADV7511_REG_AN(2):
92         case ADV7511_REG_AN(3):
93         case ADV7511_REG_AN(4):
94         case ADV7511_REG_AN(5):
95         case ADV7511_REG_AN(6):
96         case ADV7511_REG_AN(7):
97         case ADV7511_REG_HDCP_STATUS:
98         case ADV7511_REG_BCAPS:
99         case ADV7511_REG_BKSV(0):
100         case ADV7511_REG_BKSV(1):
101         case ADV7511_REG_BKSV(2):
102         case ADV7511_REG_BKSV(3):
103         case ADV7511_REG_BKSV(4):
104         case ADV7511_REG_DDC_STATUS:
105         case ADV7511_REG_EDID_READ_CTRL:
106         case ADV7511_REG_BSTATUS(0):
107         case ADV7511_REG_BSTATUS(1):
108         case ADV7511_REG_CHIP_ID_HIGH:
109         case ADV7511_REG_CHIP_ID_LOW:
110                 return true;
111         }
112
113         return false;
114 }
115
116 static const struct regmap_config adv7511_regmap_config = {
117         .reg_bits = 8,
118         .val_bits = 8,
119
120         .max_register = 0xff,
121         .cache_type = REGCACHE_RBTREE,
122         .reg_defaults_raw = adv7511_register_defaults,
123         .num_reg_defaults_raw = ARRAY_SIZE(adv7511_register_defaults),
124
125         .volatile_reg = adv7511_register_volatile,
126 };
127
128 /* -----------------------------------------------------------------------------
129  * Hardware configuration
130  */
131
132 static void adv7511_set_colormap(struct adv7511 *adv7511, bool enable,
133                                  const uint16_t *coeff,
134                                  unsigned int scaling_factor)
135 {
136         unsigned int i;
137
138         regmap_update_bits(adv7511->regmap, ADV7511_REG_CSC_UPPER(1),
139                            ADV7511_CSC_UPDATE_MODE, ADV7511_CSC_UPDATE_MODE);
140
141         if (enable) {
142                 for (i = 0; i < 12; ++i) {
143                         regmap_update_bits(adv7511->regmap,
144                                            ADV7511_REG_CSC_UPPER(i),
145                                            0x1f, coeff[i] >> 8);
146                         regmap_write(adv7511->regmap,
147                                      ADV7511_REG_CSC_LOWER(i),
148                                      coeff[i] & 0xff);
149                 }
150         }
151
152         if (enable)
153                 regmap_update_bits(adv7511->regmap, ADV7511_REG_CSC_UPPER(0),
154                                    0xe0, 0x80 | (scaling_factor << 5));
155         else
156                 regmap_update_bits(adv7511->regmap, ADV7511_REG_CSC_UPPER(0),
157                                    0x80, 0x00);
158
159         regmap_update_bits(adv7511->regmap, ADV7511_REG_CSC_UPPER(1),
160                            ADV7511_CSC_UPDATE_MODE, 0);
161 }
162
163 static int adv7511_packet_enable(struct adv7511 *adv7511, unsigned int packet)
164 {
165         if (packet & 0xff)
166                 regmap_update_bits(adv7511->regmap, ADV7511_REG_PACKET_ENABLE0,
167                                    packet, 0xff);
168
169         if (packet & 0xff00) {
170                 packet >>= 8;
171                 regmap_update_bits(adv7511->regmap, ADV7511_REG_PACKET_ENABLE1,
172                                    packet, 0xff);
173         }
174
175         return 0;
176 }
177
178 static int adv7511_packet_disable(struct adv7511 *adv7511, unsigned int packet)
179 {
180         if (packet & 0xff)
181                 regmap_update_bits(adv7511->regmap, ADV7511_REG_PACKET_ENABLE0,
182                                    packet, 0x00);
183
184         if (packet & 0xff00) {
185                 packet >>= 8;
186                 regmap_update_bits(adv7511->regmap, ADV7511_REG_PACKET_ENABLE1,
187                                    packet, 0x00);
188         }
189
190         return 0;
191 }
192
193 /* Coefficients for adv7511 color space conversion */
194 static const uint16_t adv7511_csc_ycbcr_to_rgb[] = {
195         0x0734, 0x04ad, 0x0000, 0x1c1b,
196         0x1ddc, 0x04ad, 0x1f24, 0x0135,
197         0x0000, 0x04ad, 0x087c, 0x1b77,
198 };
199
200 static void adv7511_set_config_csc(struct adv7511 *adv7511,
201                                    struct drm_connector *connector,
202                                    bool rgb, bool hdmi_mode)
203 {
204         struct adv7511_video_config config;
205         bool output_format_422, output_format_ycbcr;
206         unsigned int mode;
207         uint8_t infoframe[17];
208
209         config.hdmi_mode = hdmi_mode;
210
211         hdmi_avi_infoframe_init(&config.avi_infoframe);
212
213         config.avi_infoframe.scan_mode = HDMI_SCAN_MODE_UNDERSCAN;
214
215         if (rgb) {
216                 config.csc_enable = false;
217                 config.avi_infoframe.colorspace = HDMI_COLORSPACE_RGB;
218         } else {
219                 config.csc_scaling_factor = ADV7511_CSC_SCALING_4;
220                 config.csc_coefficents = adv7511_csc_ycbcr_to_rgb;
221
222                 if ((connector->display_info.color_formats &
223                      DRM_COLOR_FORMAT_YCRCB422) &&
224                     config.hdmi_mode) {
225                         config.csc_enable = false;
226                         config.avi_infoframe.colorspace =
227                                 HDMI_COLORSPACE_YUV422;
228                 } else {
229                         config.csc_enable = true;
230                         config.avi_infoframe.colorspace = HDMI_COLORSPACE_RGB;
231                 }
232         }
233
234         if (config.hdmi_mode) {
235                 mode = ADV7511_HDMI_CFG_MODE_HDMI;
236
237                 switch (config.avi_infoframe.colorspace) {
238                 case HDMI_COLORSPACE_YUV444:
239                         output_format_422 = false;
240                         output_format_ycbcr = true;
241                         break;
242                 case HDMI_COLORSPACE_YUV422:
243                         output_format_422 = true;
244                         output_format_ycbcr = true;
245                         break;
246                 default:
247                         output_format_422 = false;
248                         output_format_ycbcr = false;
249                         break;
250                 }
251         } else {
252                 mode = ADV7511_HDMI_CFG_MODE_DVI;
253                 output_format_422 = false;
254                 output_format_ycbcr = false;
255         }
256
257         adv7511_packet_disable(adv7511, ADV7511_PACKET_ENABLE_AVI_INFOFRAME);
258
259         adv7511_set_colormap(adv7511, config.csc_enable,
260                              config.csc_coefficents,
261                              config.csc_scaling_factor);
262
263         regmap_update_bits(adv7511->regmap, ADV7511_REG_VIDEO_INPUT_CFG1, 0x81,
264                            (output_format_422 << 7) | output_format_ycbcr);
265
266         regmap_update_bits(adv7511->regmap, ADV7511_REG_HDCP_HDMI_CFG,
267                            ADV7511_HDMI_CFG_MODE_MASK, mode);
268
269         hdmi_avi_infoframe_pack(&config.avi_infoframe, infoframe,
270                                 sizeof(infoframe));
271
272         /* The AVI infoframe id is not configurable */
273         regmap_bulk_write(adv7511->regmap, ADV7511_REG_AVI_INFOFRAME_VERSION,
274                           infoframe + 1, sizeof(infoframe) - 1);
275
276         adv7511_packet_enable(adv7511, ADV7511_PACKET_ENABLE_AVI_INFOFRAME);
277 }
278
279 static void adv7511_set_link_config(struct adv7511 *adv7511,
280                                     const struct adv7511_link_config *config)
281 {
282         /*
283          * The input style values documented in the datasheet don't match the
284          * hardware register field values :-(
285          */
286         static const unsigned int input_styles[4] = { 0, 2, 1, 3 };
287
288         unsigned int clock_delay;
289         unsigned int color_depth;
290         unsigned int input_id;
291
292         clock_delay = (config->clock_delay + 1200) / 400;
293         color_depth = config->input_color_depth == 8 ? 3
294                     : (config->input_color_depth == 10 ? 1 : 2);
295
296         /* TODO Support input ID 6 */
297         if (config->input_colorspace != HDMI_COLORSPACE_YUV422)
298                 input_id = config->input_clock == ADV7511_INPUT_CLOCK_DDR
299                          ? 5 : 0;
300         else if (config->input_clock == ADV7511_INPUT_CLOCK_DDR)
301                 input_id = config->embedded_sync ? 8 : 7;
302         else if (config->input_clock == ADV7511_INPUT_CLOCK_2X)
303                 input_id = config->embedded_sync ? 4 : 3;
304         else
305                 input_id = config->embedded_sync ? 2 : 1;
306
307         regmap_update_bits(adv7511->regmap, ADV7511_REG_I2C_FREQ_ID_CFG, 0xf,
308                            input_id);
309         regmap_update_bits(adv7511->regmap, ADV7511_REG_VIDEO_INPUT_CFG1, 0x7e,
310                            (color_depth << 4) |
311                            (input_styles[config->input_style] << 2));
312         regmap_write(adv7511->regmap, ADV7511_REG_VIDEO_INPUT_CFG2,
313                      config->input_justification << 3);
314         regmap_write(adv7511->regmap, ADV7511_REG_TIMING_GEN_SEQ,
315                      config->sync_pulse << 2);
316
317         regmap_write(adv7511->regmap, 0xba, clock_delay << 5);
318
319         adv7511->embedded_sync = config->embedded_sync;
320         adv7511->hsync_polarity = config->hsync_polarity;
321         adv7511->vsync_polarity = config->vsync_polarity;
322         adv7511->rgb = config->input_colorspace == HDMI_COLORSPACE_RGB;
323 }
324
325 static void __adv7511_power_on(struct adv7511 *adv7511)
326 {
327         adv7511->current_edid_segment = -1;
328
329         regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
330                            ADV7511_POWER_POWER_DOWN, 0);
331         if (adv7511->i2c_main->irq) {
332                 /*
333                  * Documentation says the INT_ENABLE registers are reset in
334                  * POWER_DOWN mode. My 7511w preserved the bits, however.
335                  * Still, let's be safe and stick to the documentation.
336                  */
337                 regmap_write(adv7511->regmap, ADV7511_REG_INT_ENABLE(0),
338                              ADV7511_INT0_EDID_READY | ADV7511_INT0_HPD);
339                 regmap_write(adv7511->regmap, ADV7511_REG_INT_ENABLE(1),
340                              ADV7511_INT1_DDC_ERROR);
341         }
342
343         /*
344          * Per spec it is allowed to pulse the HPD signal to indicate that the
345          * EDID information has changed. Some monitors do this when they wakeup
346          * from standby or are enabled. When the HPD goes low the adv7511 is
347          * reset and the outputs are disabled which might cause the monitor to
348          * go to standby again. To avoid this we ignore the HPD pin for the
349          * first few seconds after enabling the output.
350          */
351         regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
352                            ADV7511_REG_POWER2_HPD_SRC_MASK,
353                            ADV7511_REG_POWER2_HPD_SRC_NONE);
354 }
355
356 static void adv7511_power_on(struct adv7511 *adv7511)
357 {
358         __adv7511_power_on(adv7511);
359
360         /*
361          * Most of the registers are reset during power down or when HPD is low.
362          */
363         regcache_sync(adv7511->regmap);
364
365         if (adv7511->type == ADV7533)
366                 adv7533_dsi_power_on(adv7511);
367         adv7511->powered = true;
368 }
369
370 static void __adv7511_power_off(struct adv7511 *adv7511)
371 {
372         /* TODO: setup additional power down modes */
373         regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
374                            ADV7511_POWER_POWER_DOWN,
375                            ADV7511_POWER_POWER_DOWN);
376         regcache_mark_dirty(adv7511->regmap);
377 }
378
379 static void adv7511_power_off(struct adv7511 *adv7511)
380 {
381         __adv7511_power_off(adv7511);
382         if (adv7511->type == ADV7533)
383                 adv7533_dsi_power_off(adv7511);
384         adv7511->powered = false;
385 }
386
387 /* -----------------------------------------------------------------------------
388  * Interrupt and hotplug detection
389  */
390
391 static bool adv7511_hpd(struct adv7511 *adv7511)
392 {
393         unsigned int irq0;
394         int ret;
395
396         ret = regmap_read(adv7511->regmap, ADV7511_REG_INT(0), &irq0);
397         if (ret < 0)
398                 return false;
399
400         if (irq0 & ADV7511_INT0_HPD) {
401                 regmap_write(adv7511->regmap, ADV7511_REG_INT(0),
402                              ADV7511_INT0_HPD);
403                 return true;
404         }
405
406         return false;
407 }
408
409 static void adv7511_hpd_work(struct work_struct *work)
410 {
411         struct adv7511 *adv7511 = container_of(work, struct adv7511, hpd_work);
412         enum drm_connector_status status;
413         unsigned int val;
414         int ret;
415
416         ret = regmap_read(adv7511->regmap, ADV7511_REG_STATUS, &val);
417         if (ret < 0)
418                 status = connector_status_disconnected;
419         else if (val & ADV7511_STATUS_HPD)
420                 status = connector_status_connected;
421         else
422                 status = connector_status_disconnected;
423
424         if (adv7511->connector.status != status) {
425                 adv7511->connector.status = status;
426                 drm_kms_helper_hotplug_event(adv7511->connector.dev);
427         }
428 }
429
430 static int adv7511_irq_process(struct adv7511 *adv7511, bool process_hpd)
431 {
432         unsigned int irq0, irq1;
433         int ret;
434
435         ret = regmap_read(adv7511->regmap, ADV7511_REG_INT(0), &irq0);
436         if (ret < 0)
437                 return ret;
438
439         ret = regmap_read(adv7511->regmap, ADV7511_REG_INT(1), &irq1);
440         if (ret < 0)
441                 return ret;
442
443         regmap_write(adv7511->regmap, ADV7511_REG_INT(0), irq0);
444         regmap_write(adv7511->regmap, ADV7511_REG_INT(1), irq1);
445
446         if (process_hpd && irq0 & ADV7511_INT0_HPD && adv7511->bridge.encoder)
447                 schedule_work(&adv7511->hpd_work);
448
449         if (irq0 & ADV7511_INT0_EDID_READY || irq1 & ADV7511_INT1_DDC_ERROR) {
450                 adv7511->edid_read = true;
451
452                 if (adv7511->i2c_main->irq)
453                         wake_up_all(&adv7511->wq);
454         }
455
456         return 0;
457 }
458
459 static irqreturn_t adv7511_irq_handler(int irq, void *devid)
460 {
461         struct adv7511 *adv7511 = devid;
462         int ret;
463
464         ret = adv7511_irq_process(adv7511, true);
465         return ret < 0 ? IRQ_NONE : IRQ_HANDLED;
466 }
467
468 /* -----------------------------------------------------------------------------
469  * EDID retrieval
470  */
471
472 static int adv7511_wait_for_edid(struct adv7511 *adv7511, int timeout)
473 {
474         int ret;
475
476         if (adv7511->i2c_main->irq) {
477                 ret = wait_event_interruptible_timeout(adv7511->wq,
478                                 adv7511->edid_read, msecs_to_jiffies(timeout));
479         } else {
480                 for (; timeout > 0; timeout -= 25) {
481                         ret = adv7511_irq_process(adv7511, false);
482                         if (ret < 0)
483                                 break;
484
485                         if (adv7511->edid_read)
486                                 break;
487
488                         msleep(25);
489                 }
490         }
491
492         return adv7511->edid_read ? 0 : -EIO;
493 }
494
495 static int adv7511_get_edid_block(void *data, u8 *buf, unsigned int block,
496                                   size_t len)
497 {
498         struct adv7511 *adv7511 = data;
499         struct i2c_msg xfer[2];
500         uint8_t offset;
501         unsigned int i;
502         int ret;
503
504         if (len > 128)
505                 return -EINVAL;
506
507         if (adv7511->current_edid_segment != block / 2) {
508                 unsigned int status;
509
510                 ret = regmap_read(adv7511->regmap, ADV7511_REG_DDC_STATUS,
511                                   &status);
512                 if (ret < 0)
513                         return ret;
514
515                 if (status != 2) {
516                         adv7511->edid_read = false;
517                         regmap_write(adv7511->regmap, ADV7511_REG_EDID_SEGMENT,
518                                      block);
519                         ret = adv7511_wait_for_edid(adv7511, 200);
520                         if (ret < 0)
521                                 return ret;
522                 }
523
524                 /* Break this apart, hopefully more I2C controllers will
525                  * support 64 byte transfers than 256 byte transfers
526                  */
527
528                 xfer[0].addr = adv7511->i2c_edid->addr;
529                 xfer[0].flags = 0;
530                 xfer[0].len = 1;
531                 xfer[0].buf = &offset;
532                 xfer[1].addr = adv7511->i2c_edid->addr;
533                 xfer[1].flags = I2C_M_RD;
534                 xfer[1].len = 64;
535                 xfer[1].buf = adv7511->edid_buf;
536
537                 offset = 0;
538
539                 for (i = 0; i < 4; ++i) {
540                         ret = i2c_transfer(adv7511->i2c_edid->adapter, xfer,
541                                            ARRAY_SIZE(xfer));
542                         if (ret < 0)
543                                 return ret;
544                         else if (ret != 2)
545                                 return -EIO;
546
547                         xfer[1].buf += 64;
548                         offset += 64;
549                 }
550
551                 adv7511->current_edid_segment = block / 2;
552         }
553
554         if (block % 2 == 0)
555                 memcpy(buf, adv7511->edid_buf, len);
556         else
557                 memcpy(buf, adv7511->edid_buf + 128, len);
558
559         return 0;
560 }
561
562 /* -----------------------------------------------------------------------------
563  * ADV75xx helpers
564  */
565
566 static int adv7511_get_modes(struct adv7511 *adv7511,
567                              struct drm_connector *connector)
568 {
569         struct edid *edid;
570         unsigned int count;
571
572         /* Reading the EDID only works if the device is powered */
573         if (!adv7511->powered) {
574                 unsigned int edid_i2c_addr =
575                                         (adv7511->i2c_main->addr << 1) + 4;
576
577                 __adv7511_power_on(adv7511);
578
579                 /* Reset the EDID_I2C_ADDR register as it might be cleared */
580                 regmap_write(adv7511->regmap, ADV7511_REG_EDID_I2C_ADDR,
581                              edid_i2c_addr);
582         }
583
584         edid = drm_do_get_edid(connector, adv7511_get_edid_block, adv7511);
585
586         if (!adv7511->powered)
587                 __adv7511_power_off(adv7511);
588
589
590         drm_mode_connector_update_edid_property(connector, edid);
591         count = drm_add_edid_modes(connector, edid);
592
593         adv7511_set_config_csc(adv7511, connector, adv7511->rgb,
594                                drm_detect_hdmi_monitor(edid));
595
596         kfree(edid);
597
598         return count;
599 }
600
601 static enum drm_connector_status
602 adv7511_detect(struct adv7511 *adv7511, struct drm_connector *connector)
603 {
604         enum drm_connector_status status;
605         unsigned int val;
606         bool hpd;
607         int ret;
608
609         ret = regmap_read(adv7511->regmap, ADV7511_REG_STATUS, &val);
610         if (ret < 0)
611                 return connector_status_disconnected;
612
613         if (val & ADV7511_STATUS_HPD)
614                 status = connector_status_connected;
615         else
616                 status = connector_status_disconnected;
617
618         hpd = adv7511_hpd(adv7511);
619
620         /* The chip resets itself when the cable is disconnected, so in case
621          * there is a pending HPD interrupt and the cable is connected there was
622          * at least one transition from disconnected to connected and the chip
623          * has to be reinitialized. */
624         if (status == connector_status_connected && hpd && adv7511->powered) {
625                 regcache_mark_dirty(adv7511->regmap);
626                 adv7511_power_on(adv7511);
627                 adv7511_get_modes(adv7511, connector);
628                 if (adv7511->status == connector_status_connected)
629                         status = connector_status_disconnected;
630         } else {
631                 /* Renable HPD sensing */
632                 regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
633                                    ADV7511_REG_POWER2_HPD_SRC_MASK,
634                                    ADV7511_REG_POWER2_HPD_SRC_BOTH);
635         }
636
637         adv7511->status = status;
638         return status;
639 }
640
641 static int adv7511_mode_valid(struct adv7511 *adv7511,
642                               struct drm_display_mode *mode)
643 {
644         if (mode->clock > 165000)
645                 return MODE_CLOCK_HIGH;
646
647         return MODE_OK;
648 }
649
650 static void adv7511_mode_set(struct adv7511 *adv7511,
651                              struct drm_display_mode *mode,
652                              struct drm_display_mode *adj_mode)
653 {
654         unsigned int low_refresh_rate;
655         unsigned int hsync_polarity = 0;
656         unsigned int vsync_polarity = 0;
657
658         if (adv7511->embedded_sync) {
659                 unsigned int hsync_offset, hsync_len;
660                 unsigned int vsync_offset, vsync_len;
661
662                 hsync_offset = adj_mode->crtc_hsync_start -
663                                adj_mode->crtc_hdisplay;
664                 vsync_offset = adj_mode->crtc_vsync_start -
665                                adj_mode->crtc_vdisplay;
666                 hsync_len = adj_mode->crtc_hsync_end -
667                             adj_mode->crtc_hsync_start;
668                 vsync_len = adj_mode->crtc_vsync_end -
669                             adj_mode->crtc_vsync_start;
670
671                 /* The hardware vsync generator has a off-by-one bug */
672                 vsync_offset += 1;
673
674                 regmap_write(adv7511->regmap, ADV7511_REG_HSYNC_PLACEMENT_MSB,
675                              ((hsync_offset >> 10) & 0x7) << 5);
676                 regmap_write(adv7511->regmap, ADV7511_REG_SYNC_DECODER(0),
677                              (hsync_offset >> 2) & 0xff);
678                 regmap_write(adv7511->regmap, ADV7511_REG_SYNC_DECODER(1),
679                              ((hsync_offset & 0x3) << 6) |
680                              ((hsync_len >> 4) & 0x3f));
681                 regmap_write(adv7511->regmap, ADV7511_REG_SYNC_DECODER(2),
682                              ((hsync_len & 0xf) << 4) |
683                              ((vsync_offset >> 6) & 0xf));
684                 regmap_write(adv7511->regmap, ADV7511_REG_SYNC_DECODER(3),
685                              ((vsync_offset & 0x3f) << 2) |
686                              ((vsync_len >> 8) & 0x3));
687                 regmap_write(adv7511->regmap, ADV7511_REG_SYNC_DECODER(4),
688                              vsync_len & 0xff);
689
690                 hsync_polarity = !(adj_mode->flags & DRM_MODE_FLAG_PHSYNC);
691                 vsync_polarity = !(adj_mode->flags & DRM_MODE_FLAG_PVSYNC);
692         } else {
693                 enum adv7511_sync_polarity mode_hsync_polarity;
694                 enum adv7511_sync_polarity mode_vsync_polarity;
695
696                 /**
697                  * If the input signal is always low or always high we want to
698                  * invert or let it passthrough depending on the polarity of the
699                  * current mode.
700                  **/
701                 if (adj_mode->flags & DRM_MODE_FLAG_NHSYNC)
702                         mode_hsync_polarity = ADV7511_SYNC_POLARITY_LOW;
703                 else
704                         mode_hsync_polarity = ADV7511_SYNC_POLARITY_HIGH;
705
706                 if (adj_mode->flags & DRM_MODE_FLAG_NVSYNC)
707                         mode_vsync_polarity = ADV7511_SYNC_POLARITY_LOW;
708                 else
709                         mode_vsync_polarity = ADV7511_SYNC_POLARITY_HIGH;
710
711                 if (adv7511->hsync_polarity != mode_hsync_polarity &&
712                     adv7511->hsync_polarity !=
713                     ADV7511_SYNC_POLARITY_PASSTHROUGH)
714                         hsync_polarity = 1;
715
716                 if (adv7511->vsync_polarity != mode_vsync_polarity &&
717                     adv7511->vsync_polarity !=
718                     ADV7511_SYNC_POLARITY_PASSTHROUGH)
719                         vsync_polarity = 1;
720         }
721
722         if (mode->vrefresh <= 24000)
723                 low_refresh_rate = ADV7511_LOW_REFRESH_RATE_24HZ;
724         else if (mode->vrefresh <= 25000)
725                 low_refresh_rate = ADV7511_LOW_REFRESH_RATE_25HZ;
726         else if (mode->vrefresh <= 30000)
727                 low_refresh_rate = ADV7511_LOW_REFRESH_RATE_30HZ;
728         else
729                 low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
730
731         regmap_update_bits(adv7511->regmap, 0xfb,
732                 0x6, low_refresh_rate << 1);
733         regmap_update_bits(adv7511->regmap, 0x17,
734                 0x60, (vsync_polarity << 6) | (hsync_polarity << 5));
735
736         if (adv7511->type == ADV7533)
737                 adv7533_mode_set(adv7511, adj_mode);
738
739         drm_mode_copy(&adv7511->curr_mode, adj_mode);
740
741         /*
742          * TODO Test first order 4:2:2 to 4:4:4 up conversion method, which is
743          * supposed to give better results.
744          */
745
746         adv7511->f_tmds = mode->clock;
747 }
748
749 /* Connector funcs */
750 static struct adv7511 *connector_to_adv7511(struct drm_connector *connector)
751 {
752         return container_of(connector, struct adv7511, connector);
753 }
754
755 static int adv7511_connector_get_modes(struct drm_connector *connector)
756 {
757         struct adv7511 *adv = connector_to_adv7511(connector);
758
759         return adv7511_get_modes(adv, connector);
760 }
761
762 static enum drm_mode_status
763 adv7511_connector_mode_valid(struct drm_connector *connector,
764                              struct drm_display_mode *mode)
765 {
766         struct adv7511 *adv = connector_to_adv7511(connector);
767
768         return adv7511_mode_valid(adv, mode);
769 }
770
771 static struct drm_connector_helper_funcs adv7511_connector_helper_funcs = {
772         .get_modes = adv7511_connector_get_modes,
773         .mode_valid = adv7511_connector_mode_valid,
774 };
775
776 static enum drm_connector_status
777 adv7511_connector_detect(struct drm_connector *connector, bool force)
778 {
779         struct adv7511 *adv = connector_to_adv7511(connector);
780
781         return adv7511_detect(adv, connector);
782 }
783
784 static const struct drm_connector_funcs adv7511_connector_funcs = {
785         .fill_modes = drm_helper_probe_single_connector_modes,
786         .detect = adv7511_connector_detect,
787         .destroy = drm_connector_cleanup,
788         .reset = drm_atomic_helper_connector_reset,
789         .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
790         .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
791 };
792
793 /* Bridge funcs */
794 static struct adv7511 *bridge_to_adv7511(struct drm_bridge *bridge)
795 {
796         return container_of(bridge, struct adv7511, bridge);
797 }
798
799 static void adv7511_bridge_enable(struct drm_bridge *bridge)
800 {
801         struct adv7511 *adv = bridge_to_adv7511(bridge);
802
803         adv7511_power_on(adv);
804 }
805
806 static void adv7511_bridge_disable(struct drm_bridge *bridge)
807 {
808         struct adv7511 *adv = bridge_to_adv7511(bridge);
809
810         adv7511_power_off(adv);
811 }
812
813 static void adv7511_bridge_mode_set(struct drm_bridge *bridge,
814                                     struct drm_display_mode *mode,
815                                     struct drm_display_mode *adj_mode)
816 {
817         struct adv7511 *adv = bridge_to_adv7511(bridge);
818
819         adv7511_mode_set(adv, mode, adj_mode);
820 }
821
822 static int adv7511_bridge_attach(struct drm_bridge *bridge)
823 {
824         struct adv7511 *adv = bridge_to_adv7511(bridge);
825         int ret;
826
827         if (!bridge->encoder) {
828                 DRM_ERROR("Parent encoder object not found");
829                 return -ENODEV;
830         }
831
832         if (adv->i2c_main->irq)
833                 adv->connector.polled = DRM_CONNECTOR_POLL_HPD;
834         else
835                 adv->connector.polled = DRM_CONNECTOR_POLL_CONNECT |
836                                 DRM_CONNECTOR_POLL_DISCONNECT;
837
838         ret = drm_connector_init(bridge->dev, &adv->connector,
839                                  &adv7511_connector_funcs,
840                                  DRM_MODE_CONNECTOR_HDMIA);
841         if (ret) {
842                 DRM_ERROR("Failed to initialize connector with drm\n");
843                 return ret;
844         }
845         drm_connector_helper_add(&adv->connector,
846                                  &adv7511_connector_helper_funcs);
847         drm_mode_connector_attach_encoder(&adv->connector, bridge->encoder);
848
849         if (adv->type == ADV7533)
850                 ret = adv7533_attach_dsi(adv);
851
852         if (adv->i2c_main->irq)
853                 regmap_write(adv->regmap, ADV7511_REG_INT_ENABLE(0),
854                              ADV7511_INT0_HPD);
855
856         return ret;
857 }
858
859 static const struct drm_bridge_funcs adv7511_bridge_funcs = {
860         .enable = adv7511_bridge_enable,
861         .disable = adv7511_bridge_disable,
862         .mode_set = adv7511_bridge_mode_set,
863         .attach = adv7511_bridge_attach,
864 };
865
866 /* -----------------------------------------------------------------------------
867  * Probe & remove
868  */
869
870 static const char * const adv7511_supply_names[] = {
871         "avdd",
872         "dvdd",
873         "pvdd",
874         "bgvdd",
875         "dvdd-3v",
876 };
877
878 static const char * const adv7533_supply_names[] = {
879         "avdd",
880         "dvdd",
881         "pvdd",
882         "a2vdd",
883         "v3p3",
884         "v1p2",
885 };
886
887 static int adv7511_init_regulators(struct adv7511 *adv)
888 {
889         struct device *dev = &adv->i2c_main->dev;
890         const char * const *supply_names;
891         unsigned int i;
892         int ret;
893
894         if (adv->type == ADV7511) {
895                 supply_names = adv7511_supply_names;
896                 adv->num_supplies = ARRAY_SIZE(adv7511_supply_names);
897         } else {
898                 supply_names = adv7533_supply_names;
899                 adv->num_supplies = ARRAY_SIZE(adv7533_supply_names);
900         }
901
902         adv->supplies = devm_kcalloc(dev, adv->num_supplies,
903                                      sizeof(*adv->supplies), GFP_KERNEL);
904         if (!adv->supplies)
905                 return -ENOMEM;
906
907         for (i = 0; i < adv->num_supplies; i++)
908                 adv->supplies[i].supply = supply_names[i];
909
910         ret = devm_regulator_bulk_get(dev, adv->num_supplies, adv->supplies);
911         if (ret)
912                 return ret;
913
914         return regulator_bulk_enable(adv->num_supplies, adv->supplies);
915 }
916
917 static void adv7511_uninit_regulators(struct adv7511 *adv)
918 {
919         regulator_bulk_disable(adv->num_supplies, adv->supplies);
920 }
921
922 static int adv7511_parse_dt(struct device_node *np,
923                             struct adv7511_link_config *config)
924 {
925         const char *str;
926         int ret;
927
928         of_property_read_u32(np, "adi,input-depth", &config->input_color_depth);
929         if (config->input_color_depth != 8 && config->input_color_depth != 10 &&
930             config->input_color_depth != 12)
931                 return -EINVAL;
932
933         ret = of_property_read_string(np, "adi,input-colorspace", &str);
934         if (ret < 0)
935                 return ret;
936
937         if (!strcmp(str, "rgb"))
938                 config->input_colorspace = HDMI_COLORSPACE_RGB;
939         else if (!strcmp(str, "yuv422"))
940                 config->input_colorspace = HDMI_COLORSPACE_YUV422;
941         else if (!strcmp(str, "yuv444"))
942                 config->input_colorspace = HDMI_COLORSPACE_YUV444;
943         else
944                 return -EINVAL;
945
946         ret = of_property_read_string(np, "adi,input-clock", &str);
947         if (ret < 0)
948                 return ret;
949
950         if (!strcmp(str, "1x"))
951                 config->input_clock = ADV7511_INPUT_CLOCK_1X;
952         else if (!strcmp(str, "2x"))
953                 config->input_clock = ADV7511_INPUT_CLOCK_2X;
954         else if (!strcmp(str, "ddr"))
955                 config->input_clock = ADV7511_INPUT_CLOCK_DDR;
956         else
957                 return -EINVAL;
958
959         if (config->input_colorspace == HDMI_COLORSPACE_YUV422 ||
960             config->input_clock != ADV7511_INPUT_CLOCK_1X) {
961                 ret = of_property_read_u32(np, "adi,input-style",
962                                            &config->input_style);
963                 if (ret)
964                         return ret;
965
966                 if (config->input_style < 1 || config->input_style > 3)
967                         return -EINVAL;
968
969                 ret = of_property_read_string(np, "adi,input-justification",
970                                               &str);
971                 if (ret < 0)
972                         return ret;
973
974                 if (!strcmp(str, "left"))
975                         config->input_justification =
976                                 ADV7511_INPUT_JUSTIFICATION_LEFT;
977                 else if (!strcmp(str, "evenly"))
978                         config->input_justification =
979                                 ADV7511_INPUT_JUSTIFICATION_EVENLY;
980                 else if (!strcmp(str, "right"))
981                         config->input_justification =
982                                 ADV7511_INPUT_JUSTIFICATION_RIGHT;
983                 else
984                         return -EINVAL;
985
986         } else {
987                 config->input_style = 1;
988                 config->input_justification = ADV7511_INPUT_JUSTIFICATION_LEFT;
989         }
990
991         of_property_read_u32(np, "adi,clock-delay", &config->clock_delay);
992         if (config->clock_delay < -1200 || config->clock_delay > 1600)
993                 return -EINVAL;
994
995         config->embedded_sync = of_property_read_bool(np, "adi,embedded-sync");
996
997         /* Hardcode the sync pulse configurations for now. */
998         config->sync_pulse = ADV7511_INPUT_SYNC_PULSE_NONE;
999         config->vsync_polarity = ADV7511_SYNC_POLARITY_PASSTHROUGH;
1000         config->hsync_polarity = ADV7511_SYNC_POLARITY_PASSTHROUGH;
1001
1002         return 0;
1003 }
1004
1005 static int adv7511_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
1006 {
1007         struct adv7511_link_config link_config;
1008         struct adv7511 *adv7511;
1009         struct device *dev = &i2c->dev;
1010         unsigned int main_i2c_addr = i2c->addr << 1;
1011         unsigned int edid_i2c_addr = main_i2c_addr + 4;
1012         unsigned int val;
1013         int ret;
1014
1015         if (!dev->of_node)
1016                 return -EINVAL;
1017
1018         adv7511 = devm_kzalloc(dev, sizeof(*adv7511), GFP_KERNEL);
1019         if (!adv7511)
1020                 return -ENOMEM;
1021
1022         adv7511->i2c_main = i2c;
1023         adv7511->powered = false;
1024         adv7511->status = connector_status_disconnected;
1025
1026         if (dev->of_node)
1027                 adv7511->type = (enum adv7511_type)of_device_get_match_data(dev);
1028         else
1029                 adv7511->type = id->driver_data;
1030
1031         memset(&link_config, 0, sizeof(link_config));
1032
1033         if (adv7511->type == ADV7511)
1034                 ret = adv7511_parse_dt(dev->of_node, &link_config);
1035         else
1036                 ret = adv7533_parse_dt(dev->of_node, adv7511);
1037         if (ret)
1038                 return ret;
1039
1040         ret = adv7511_init_regulators(adv7511);
1041         if (ret) {
1042                 dev_err(dev, "failed to init regulators\n");
1043                 return ret;
1044         }
1045
1046         /*
1047          * The power down GPIO is optional. If present, toggle it from active to
1048          * inactive to wake up the encoder.
1049          */
1050         adv7511->gpio_pd = devm_gpiod_get_optional(dev, "pd", GPIOD_OUT_HIGH);
1051         if (IS_ERR(adv7511->gpio_pd)) {
1052                 ret = PTR_ERR(adv7511->gpio_pd);
1053                 goto uninit_regulators;
1054         }
1055
1056         if (adv7511->gpio_pd) {
1057                 mdelay(5);
1058                 gpiod_set_value_cansleep(adv7511->gpio_pd, 0);
1059         }
1060
1061         adv7511->regmap = devm_regmap_init_i2c(i2c, &adv7511_regmap_config);
1062         if (IS_ERR(adv7511->regmap)) {
1063                 ret = PTR_ERR(adv7511->regmap);
1064                 goto uninit_regulators;
1065         }
1066
1067         ret = regmap_read(adv7511->regmap, ADV7511_REG_CHIP_REVISION, &val);
1068         if (ret)
1069                 goto uninit_regulators;
1070         dev_dbg(dev, "Rev. %d\n", val);
1071
1072         if (adv7511->type == ADV7511)
1073                 ret = regmap_register_patch(adv7511->regmap,
1074                                             adv7511_fixed_registers,
1075                                             ARRAY_SIZE(adv7511_fixed_registers));
1076         else
1077                 ret = adv7533_patch_registers(adv7511);
1078         if (ret)
1079                 goto uninit_regulators;
1080
1081         regmap_write(adv7511->regmap, ADV7511_REG_EDID_I2C_ADDR, edid_i2c_addr);
1082         regmap_write(adv7511->regmap, ADV7511_REG_PACKET_I2C_ADDR,
1083                      main_i2c_addr - 0xa);
1084         regmap_write(adv7511->regmap, ADV7511_REG_CEC_I2C_ADDR,
1085                      main_i2c_addr - 2);
1086
1087         adv7511_packet_disable(adv7511, 0xffff);
1088
1089         adv7511->i2c_edid = i2c_new_dummy(i2c->adapter, edid_i2c_addr >> 1);
1090         if (!adv7511->i2c_edid) {
1091                 ret = -ENOMEM;
1092                 goto uninit_regulators;
1093         }
1094
1095         if (adv7511->type == ADV7533) {
1096                 ret = adv7533_init_cec(adv7511);
1097                 if (ret)
1098                         goto err_i2c_unregister_edid;
1099         }
1100
1101         INIT_WORK(&adv7511->hpd_work, adv7511_hpd_work);
1102
1103         if (i2c->irq) {
1104                 init_waitqueue_head(&adv7511->wq);
1105
1106                 ret = devm_request_threaded_irq(dev, i2c->irq, NULL,
1107                                                 adv7511_irq_handler,
1108                                                 IRQF_ONESHOT, dev_name(dev),
1109                                                 adv7511);
1110                 if (ret)
1111                         goto err_unregister_cec;
1112         }
1113
1114         /* CEC is unused for now */
1115         regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL,
1116                      ADV7511_CEC_CTRL_POWER_DOWN);
1117
1118         adv7511_power_off(adv7511);
1119
1120         i2c_set_clientdata(i2c, adv7511);
1121
1122         if (adv7511->type == ADV7511)
1123                 adv7511_set_link_config(adv7511, &link_config);
1124
1125         adv7511->bridge.funcs = &adv7511_bridge_funcs;
1126         adv7511->bridge.of_node = dev->of_node;
1127
1128         drm_bridge_add(&adv7511->bridge);
1129
1130         adv7511_audio_init(dev, adv7511);
1131
1132         return 0;
1133
1134 err_unregister_cec:
1135         adv7533_uninit_cec(adv7511);
1136 err_i2c_unregister_edid:
1137         i2c_unregister_device(adv7511->i2c_edid);
1138 uninit_regulators:
1139         adv7511_uninit_regulators(adv7511);
1140
1141         return ret;
1142 }
1143
1144 static int adv7511_remove(struct i2c_client *i2c)
1145 {
1146         struct adv7511 *adv7511 = i2c_get_clientdata(i2c);
1147
1148         if (adv7511->type == ADV7533) {
1149                 adv7533_detach_dsi(adv7511);
1150                 adv7533_uninit_cec(adv7511);
1151         }
1152
1153         adv7511_uninit_regulators(adv7511);
1154
1155         drm_bridge_remove(&adv7511->bridge);
1156
1157         adv7511_audio_exit(adv7511);
1158
1159         i2c_unregister_device(adv7511->i2c_edid);
1160
1161         return 0;
1162 }
1163
1164 static const struct i2c_device_id adv7511_i2c_ids[] = {
1165         { "adv7511", ADV7511 },
1166         { "adv7511w", ADV7511 },
1167         { "adv7513", ADV7511 },
1168 #ifdef CONFIG_DRM_I2C_ADV7533
1169         { "adv7533", ADV7533 },
1170 #endif
1171         { }
1172 };
1173 MODULE_DEVICE_TABLE(i2c, adv7511_i2c_ids);
1174
1175 static const struct of_device_id adv7511_of_ids[] = {
1176         { .compatible = "adi,adv7511", .data = (void *)ADV7511 },
1177         { .compatible = "adi,adv7511w", .data = (void *)ADV7511 },
1178         { .compatible = "adi,adv7513", .data = (void *)ADV7511 },
1179 #ifdef CONFIG_DRM_I2C_ADV7533
1180         { .compatible = "adi,adv7533", .data = (void *)ADV7533 },
1181 #endif
1182         { }
1183 };
1184 MODULE_DEVICE_TABLE(of, adv7511_of_ids);
1185
1186 static struct mipi_dsi_driver adv7533_dsi_driver = {
1187         .driver.name = "adv7533",
1188 };
1189
1190 static struct i2c_driver adv7511_driver = {
1191         .driver = {
1192                 .name = "adv7511",
1193                 .of_match_table = adv7511_of_ids,
1194         },
1195         .id_table = adv7511_i2c_ids,
1196         .probe = adv7511_probe,
1197         .remove = adv7511_remove,
1198 };
1199
1200 static int __init adv7511_init(void)
1201 {
1202         if (IS_ENABLED(CONFIG_DRM_MIPI_DSI))
1203                 mipi_dsi_driver_register(&adv7533_dsi_driver);
1204
1205         return i2c_add_driver(&adv7511_driver);
1206 }
1207 module_init(adv7511_init);
1208
1209 static void __exit adv7511_exit(void)
1210 {
1211         i2c_del_driver(&adv7511_driver);
1212
1213         if (IS_ENABLED(CONFIG_DRM_MIPI_DSI))
1214                 mipi_dsi_driver_unregister(&adv7533_dsi_driver);
1215 }
1216 module_exit(adv7511_exit);
1217
1218 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
1219 MODULE_DESCRIPTION("ADV7511 HDMI transmitter driver");
1220 MODULE_LICENSE("GPL");