linux/drivers/media/i2c/adv7511.c
<<
>>
Prefs
   1/*
   2 * Analog Devices ADV7511 HDMI Transmitter Device Driver
   3 *
   4 * Copyright 2013 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
   5 *
   6 * This program is free software; you may redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; version 2 of the License.
   9 *
  10 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  11 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  12 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  13 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  14 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  15 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  16 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  17 * SOFTWARE.
  18 */
  19
  20
  21#include <linux/kernel.h>
  22#include <linux/module.h>
  23#include <linux/slab.h>
  24#include <linux/i2c.h>
  25#include <linux/delay.h>
  26#include <linux/videodev2.h>
  27#include <linux/gpio.h>
  28#include <linux/workqueue.h>
  29#include <linux/hdmi.h>
  30#include <linux/v4l2-dv-timings.h>
  31#include <media/v4l2-device.h>
  32#include <media/v4l2-common.h>
  33#include <media/v4l2-ctrls.h>
  34#include <media/v4l2-dv-timings.h>
  35#include <media/adv7511.h>
  36
  37static int debug;
  38module_param(debug, int, 0644);
  39MODULE_PARM_DESC(debug, "debug level (0-2)");
  40
  41MODULE_DESCRIPTION("Analog Devices ADV7511 HDMI Transmitter Device Driver");
  42MODULE_AUTHOR("Hans Verkuil");
  43MODULE_LICENSE("GPL v2");
  44
  45#define MASK_ADV7511_EDID_RDY_INT   0x04
  46#define MASK_ADV7511_MSEN_INT       0x40
  47#define MASK_ADV7511_HPD_INT        0x80
  48
  49#define MASK_ADV7511_HPD_DETECT     0x40
  50#define MASK_ADV7511_MSEN_DETECT    0x20
  51#define MASK_ADV7511_EDID_RDY       0x10
  52
  53#define EDID_MAX_RETRIES (8)
  54#define EDID_DELAY 250
  55#define EDID_MAX_SEGM 8
  56
  57#define ADV7511_MAX_WIDTH 1920
  58#define ADV7511_MAX_HEIGHT 1200
  59#define ADV7511_MIN_PIXELCLOCK 20000000
  60#define ADV7511_MAX_PIXELCLOCK 225000000
  61
  62/*
  63**********************************************************************
  64*
  65*  Arrays with configuration parameters for the ADV7511
  66*
  67**********************************************************************
  68*/
  69
  70struct i2c_reg_value {
  71        unsigned char reg;
  72        unsigned char value;
  73};
  74
  75struct adv7511_state_edid {
  76        /* total number of blocks */
  77        u32 blocks;
  78        /* Number of segments read */
  79        u32 segments;
  80        u8 data[EDID_MAX_SEGM * 256];
  81        /* Number of EDID read retries left */
  82        unsigned read_retries;
  83        bool complete;
  84};
  85
  86struct adv7511_state {
  87        struct adv7511_platform_data pdata;
  88        struct v4l2_subdev sd;
  89        struct media_pad pad;
  90        struct v4l2_ctrl_handler hdl;
  91        int chip_revision;
  92        u8 i2c_edid_addr;
  93        u8 i2c_cec_addr;
  94        u8 i2c_pktmem_addr;
  95        /* Is the adv7511 powered on? */
  96        bool power_on;
  97        /* Did we receive hotplug and rx-sense signals? */
  98        bool have_monitor;
  99        /* timings from s_dv_timings */
 100        struct v4l2_dv_timings dv_timings;
 101        u32 fmt_code;
 102        u32 colorspace;
 103        u32 ycbcr_enc;
 104        u32 quantization;
 105        u32 xfer_func;
 106        /* controls */
 107        struct v4l2_ctrl *hdmi_mode_ctrl;
 108        struct v4l2_ctrl *hotplug_ctrl;
 109        struct v4l2_ctrl *rx_sense_ctrl;
 110        struct v4l2_ctrl *have_edid0_ctrl;
 111        struct v4l2_ctrl *rgb_quantization_range_ctrl;
 112        struct i2c_client *i2c_edid;
 113        struct i2c_client *i2c_pktmem;
 114        struct adv7511_state_edid edid;
 115        /* Running counter of the number of detected EDIDs (for debugging) */
 116        unsigned edid_detect_counter;
 117        struct workqueue_struct *work_queue;
 118        struct delayed_work edid_handler; /* work entry */
 119};
 120
 121static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd);
 122static bool adv7511_check_edid_status(struct v4l2_subdev *sd);
 123static void adv7511_setup(struct v4l2_subdev *sd);
 124static int adv7511_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq);
 125static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq);
 126
 127
 128static const struct v4l2_dv_timings_cap adv7511_timings_cap = {
 129        .type = V4L2_DV_BT_656_1120,
 130        /* keep this initialization for compatibility with GCC < 4.4.6 */
 131        .reserved = { 0 },
 132        V4L2_INIT_BT_TIMINGS(0, ADV7511_MAX_WIDTH, 0, ADV7511_MAX_HEIGHT,
 133                ADV7511_MIN_PIXELCLOCK, ADV7511_MAX_PIXELCLOCK,
 134                V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
 135                        V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
 136                V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
 137                        V4L2_DV_BT_CAP_CUSTOM)
 138};
 139
 140static inline struct adv7511_state *get_adv7511_state(struct v4l2_subdev *sd)
 141{
 142        return container_of(sd, struct adv7511_state, sd);
 143}
 144
 145static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl)
 146{
 147        return &container_of(ctrl->handler, struct adv7511_state, hdl)->sd;
 148}
 149
 150/* ------------------------ I2C ----------------------------------------------- */
 151
 152static s32 adv_smbus_read_byte_data_check(struct i2c_client *client,
 153                                          u8 command, bool check)
 154{
 155        union i2c_smbus_data data;
 156
 157        if (!i2c_smbus_xfer(client->adapter, client->addr, client->flags,
 158                            I2C_SMBUS_READ, command,
 159                            I2C_SMBUS_BYTE_DATA, &data))
 160                return data.byte;
 161        if (check)
 162                v4l_err(client, "error reading %02x, %02x\n",
 163                        client->addr, command);
 164        return -1;
 165}
 166
 167static s32 adv_smbus_read_byte_data(struct i2c_client *client, u8 command)
 168{
 169        int i;
 170        for (i = 0; i < 3; i++) {
 171                int ret = adv_smbus_read_byte_data_check(client, command, true);
 172                if (ret >= 0) {
 173                        if (i)
 174                                v4l_err(client, "read ok after %d retries\n", i);
 175                        return ret;
 176                }
 177        }
 178        v4l_err(client, "read failed\n");
 179        return -1;
 180}
 181
 182static int adv7511_rd(struct v4l2_subdev *sd, u8 reg)
 183{
 184        struct i2c_client *client = v4l2_get_subdevdata(sd);
 185
 186        return adv_smbus_read_byte_data(client, reg);
 187}
 188
 189static int adv7511_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
 190{
 191        struct i2c_client *client = v4l2_get_subdevdata(sd);
 192        int ret;
 193        int i;
 194
 195        for (i = 0; i < 3; i++) {
 196                ret = i2c_smbus_write_byte_data(client, reg, val);
 197                if (ret == 0)
 198                        return 0;
 199        }
 200        v4l2_err(sd, "%s: i2c write error\n", __func__);
 201        return ret;
 202}
 203
 204/* To set specific bits in the register, a clear-mask is given (to be AND-ed),
 205   and then the value-mask (to be OR-ed). */
 206static inline void adv7511_wr_and_or(struct v4l2_subdev *sd, u8 reg, u8 clr_mask, u8 val_mask)
 207{
 208        adv7511_wr(sd, reg, (adv7511_rd(sd, reg) & clr_mask) | val_mask);
 209}
 210
 211static int adv_smbus_read_i2c_block_data(struct i2c_client *client,
 212                                         u8 command, unsigned length, u8 *values)
 213{
 214        union i2c_smbus_data data;
 215        int ret;
 216
 217        if (length > I2C_SMBUS_BLOCK_MAX)
 218                length = I2C_SMBUS_BLOCK_MAX;
 219        data.block[0] = length;
 220
 221        ret = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
 222                             I2C_SMBUS_READ, command,
 223                             I2C_SMBUS_I2C_BLOCK_DATA, &data);
 224        memcpy(values, data.block + 1, length);
 225        return ret;
 226}
 227
 228static inline void adv7511_edid_rd(struct v4l2_subdev *sd, u16 len, u8 *buf)
 229{
 230        struct adv7511_state *state = get_adv7511_state(sd);
 231        int i;
 232        int err = 0;
 233
 234        v4l2_dbg(1, debug, sd, "%s:\n", __func__);
 235
 236        for (i = 0; !err && i < len; i += I2C_SMBUS_BLOCK_MAX)
 237                err = adv_smbus_read_i2c_block_data(state->i2c_edid, i,
 238                                                    I2C_SMBUS_BLOCK_MAX, buf + i);
 239        if (err)
 240                v4l2_err(sd, "%s: i2c read error\n", __func__);
 241}
 242
 243static int adv7511_pktmem_rd(struct v4l2_subdev *sd, u8 reg)
 244{
 245        struct adv7511_state *state = get_adv7511_state(sd);
 246
 247        return adv_smbus_read_byte_data(state->i2c_pktmem, reg);
 248}
 249
 250static int adv7511_pktmem_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
 251{
 252        struct adv7511_state *state = get_adv7511_state(sd);
 253        int ret;
 254        int i;
 255
 256        for (i = 0; i < 3; i++) {
 257                ret = i2c_smbus_write_byte_data(state->i2c_pktmem, reg, val);
 258                if (ret == 0)
 259                        return 0;
 260        }
 261        v4l2_err(sd, "%s: i2c write error\n", __func__);
 262        return ret;
 263}
 264
 265/* To set specific bits in the register, a clear-mask is given (to be AND-ed),
 266   and then the value-mask (to be OR-ed). */
 267static inline void adv7511_pktmem_wr_and_or(struct v4l2_subdev *sd, u8 reg, u8 clr_mask, u8 val_mask)
 268{
 269        adv7511_pktmem_wr(sd, reg, (adv7511_pktmem_rd(sd, reg) & clr_mask) | val_mask);
 270}
 271
 272static inline bool adv7511_have_hotplug(struct v4l2_subdev *sd)
 273{
 274        return adv7511_rd(sd, 0x42) & MASK_ADV7511_HPD_DETECT;
 275}
 276
 277static inline bool adv7511_have_rx_sense(struct v4l2_subdev *sd)
 278{
 279        return adv7511_rd(sd, 0x42) & MASK_ADV7511_MSEN_DETECT;
 280}
 281
 282static void adv7511_csc_conversion_mode(struct v4l2_subdev *sd, u8 mode)
 283{
 284        adv7511_wr_and_or(sd, 0x18, 0x9f, (mode & 0x3)<<5);
 285}
 286
 287static void adv7511_csc_coeff(struct v4l2_subdev *sd,
 288                              u16 A1, u16 A2, u16 A3, u16 A4,
 289                              u16 B1, u16 B2, u16 B3, u16 B4,
 290                              u16 C1, u16 C2, u16 C3, u16 C4)
 291{
 292        /* A */
 293        adv7511_wr_and_or(sd, 0x18, 0xe0, A1>>8);
 294        adv7511_wr(sd, 0x19, A1);
 295        adv7511_wr_and_or(sd, 0x1A, 0xe0, A2>>8);
 296        adv7511_wr(sd, 0x1B, A2);
 297        adv7511_wr_and_or(sd, 0x1c, 0xe0, A3>>8);
 298        adv7511_wr(sd, 0x1d, A3);
 299        adv7511_wr_and_or(sd, 0x1e, 0xe0, A4>>8);
 300        adv7511_wr(sd, 0x1f, A4);
 301
 302        /* B */
 303        adv7511_wr_and_or(sd, 0x20, 0xe0, B1>>8);
 304        adv7511_wr(sd, 0x21, B1);
 305        adv7511_wr_and_or(sd, 0x22, 0xe0, B2>>8);
 306        adv7511_wr(sd, 0x23, B2);
 307        adv7511_wr_and_or(sd, 0x24, 0xe0, B3>>8);
 308        adv7511_wr(sd, 0x25, B3);
 309        adv7511_wr_and_or(sd, 0x26, 0xe0, B4>>8);
 310        adv7511_wr(sd, 0x27, B4);
 311
 312        /* C */
 313        adv7511_wr_and_or(sd, 0x28, 0xe0, C1>>8);
 314        adv7511_wr(sd, 0x29, C1);
 315        adv7511_wr_and_or(sd, 0x2A, 0xe0, C2>>8);
 316        adv7511_wr(sd, 0x2B, C2);
 317        adv7511_wr_and_or(sd, 0x2C, 0xe0, C3>>8);
 318        adv7511_wr(sd, 0x2D, C3);
 319        adv7511_wr_and_or(sd, 0x2E, 0xe0, C4>>8);
 320        adv7511_wr(sd, 0x2F, C4);
 321}
 322
 323static void adv7511_csc_rgb_full2limit(struct v4l2_subdev *sd, bool enable)
 324{
 325        if (enable) {
 326                u8 csc_mode = 0;
 327                adv7511_csc_conversion_mode(sd, csc_mode);
 328                adv7511_csc_coeff(sd,
 329                                  4096-564, 0, 0, 256,
 330                                  0, 4096-564, 0, 256,
 331                                  0, 0, 4096-564, 256);
 332                /* enable CSC */
 333                adv7511_wr_and_or(sd, 0x18, 0x7f, 0x80);
 334                /* AVI infoframe: Limited range RGB (16-235) */
 335                adv7511_wr_and_or(sd, 0x57, 0xf3, 0x04);
 336        } else {
 337                /* disable CSC */
 338                adv7511_wr_and_or(sd, 0x18, 0x7f, 0x0);
 339                /* AVI infoframe: Full range RGB (0-255) */
 340                adv7511_wr_and_or(sd, 0x57, 0xf3, 0x08);
 341        }
 342}
 343
 344static void adv7511_set_IT_content_AVI_InfoFrame(struct v4l2_subdev *sd)
 345{
 346        struct adv7511_state *state = get_adv7511_state(sd);
 347        if (state->dv_timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO) {
 348                /* CE format, not IT  */
 349                adv7511_wr_and_or(sd, 0x57, 0x7f, 0x00);
 350        } else {
 351                /* IT format */
 352                adv7511_wr_and_or(sd, 0x57, 0x7f, 0x80);
 353        }
 354}
 355
 356static int adv7511_set_rgb_quantization_mode(struct v4l2_subdev *sd, struct v4l2_ctrl *ctrl)
 357{
 358        switch (ctrl->val) {
 359        default:
 360                return -EINVAL;
 361                break;
 362        case V4L2_DV_RGB_RANGE_AUTO: {
 363                /* automatic */
 364                struct adv7511_state *state = get_adv7511_state(sd);
 365
 366                if (state->dv_timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO) {
 367                        /* CE format, RGB limited range (16-235) */
 368                        adv7511_csc_rgb_full2limit(sd, true);
 369                } else {
 370                        /* not CE format, RGB full range (0-255) */
 371                        adv7511_csc_rgb_full2limit(sd, false);
 372                }
 373        }
 374                break;
 375        case V4L2_DV_RGB_RANGE_LIMITED:
 376                /* RGB limited range (16-235) */
 377                adv7511_csc_rgb_full2limit(sd, true);
 378                break;
 379        case V4L2_DV_RGB_RANGE_FULL:
 380                /* RGB full range (0-255) */
 381                adv7511_csc_rgb_full2limit(sd, false);
 382                break;
 383        }
 384        return 0;
 385}
 386
 387/* ------------------------------ CTRL OPS ------------------------------ */
 388
 389static int adv7511_s_ctrl(struct v4l2_ctrl *ctrl)
 390{
 391        struct v4l2_subdev *sd = to_sd(ctrl);
 392        struct adv7511_state *state = get_adv7511_state(sd);
 393
 394        v4l2_dbg(1, debug, sd, "%s: ctrl id: %d, ctrl->val %d\n", __func__, ctrl->id, ctrl->val);
 395
 396        if (state->hdmi_mode_ctrl == ctrl) {
 397                /* Set HDMI or DVI-D */
 398                adv7511_wr_and_or(sd, 0xaf, 0xfd, ctrl->val == V4L2_DV_TX_MODE_HDMI ? 0x02 : 0x00);
 399                return 0;
 400        }
 401        if (state->rgb_quantization_range_ctrl == ctrl)
 402                return adv7511_set_rgb_quantization_mode(sd, ctrl);
 403
 404        return -EINVAL;
 405}
 406
 407static const struct v4l2_ctrl_ops adv7511_ctrl_ops = {
 408        .s_ctrl = adv7511_s_ctrl,
 409};
 410
 411/* ---------------------------- CORE OPS ------------------------------------------- */
 412
 413#ifdef CONFIG_VIDEO_ADV_DEBUG
 414static void adv7511_inv_register(struct v4l2_subdev *sd)
 415{
 416        v4l2_info(sd, "0x000-0x0ff: Main Map\n");
 417}
 418
 419static int adv7511_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
 420{
 421        reg->size = 1;
 422        switch (reg->reg >> 8) {
 423        case 0:
 424                reg->val = adv7511_rd(sd, reg->reg & 0xff);
 425                break;
 426        default:
 427                v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
 428                adv7511_inv_register(sd);
 429                break;
 430        }
 431        return 0;
 432}
 433
 434static int adv7511_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
 435{
 436        switch (reg->reg >> 8) {
 437        case 0:
 438                adv7511_wr(sd, reg->reg & 0xff, reg->val & 0xff);
 439                break;
 440        default:
 441                v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
 442                adv7511_inv_register(sd);
 443                break;
 444        }
 445        return 0;
 446}
 447#endif
 448
 449struct adv7511_cfg_read_infoframe {
 450        const char *desc;
 451        u8 present_reg;
 452        u8 present_mask;
 453        u8 header[3];
 454        u16 payload_addr;
 455};
 456
 457static u8 hdmi_infoframe_checksum(u8 *ptr, size_t size)
 458{
 459        u8 csum = 0;
 460        size_t i;
 461
 462        /* compute checksum */
 463        for (i = 0; i < size; i++)
 464                csum += ptr[i];
 465
 466        return 256 - csum;
 467}
 468
 469static void log_infoframe(struct v4l2_subdev *sd, const struct adv7511_cfg_read_infoframe *cri)
 470{
 471        struct i2c_client *client = v4l2_get_subdevdata(sd);
 472        struct device *dev = &client->dev;
 473        union hdmi_infoframe frame;
 474        u8 buffer[32];
 475        u8 len;
 476        int i;
 477
 478        if (!(adv7511_rd(sd, cri->present_reg) & cri->present_mask)) {
 479                v4l2_info(sd, "%s infoframe not transmitted\n", cri->desc);
 480                return;
 481        }
 482
 483        memcpy(buffer, cri->header, sizeof(cri->header));
 484
 485        len = buffer[2];
 486
 487        if (len + 4 > sizeof(buffer)) {
 488                v4l2_err(sd, "%s: invalid %s infoframe length %d\n", __func__, cri->desc, len);
 489                return;
 490        }
 491
 492        if (cri->payload_addr >= 0x100) {
 493                for (i = 0; i < len; i++)
 494                        buffer[i + 4] = adv7511_pktmem_rd(sd, cri->payload_addr + i - 0x100);
 495        } else {
 496                for (i = 0; i < len; i++)
 497                        buffer[i + 4] = adv7511_rd(sd, cri->payload_addr + i);
 498        }
 499        buffer[3] = 0;
 500        buffer[3] = hdmi_infoframe_checksum(buffer, len + 4);
 501
 502        if (hdmi_infoframe_unpack(&frame, buffer) < 0) {
 503                v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__, cri->desc);
 504                return;
 505        }
 506
 507        hdmi_infoframe_log(KERN_INFO, dev, &frame);
 508}
 509
 510static void adv7511_log_infoframes(struct v4l2_subdev *sd)
 511{
 512        static const struct adv7511_cfg_read_infoframe cri[] = {
 513                { "AVI", 0x44, 0x10, { 0x82, 2, 13 }, 0x55 },
 514                { "Audio", 0x44, 0x08, { 0x84, 1, 10 }, 0x73 },
 515                { "SDP", 0x40, 0x40, { 0x83, 1, 25 }, 0x103 },
 516        };
 517        int i;
 518
 519        for (i = 0; i < ARRAY_SIZE(cri); i++)
 520                log_infoframe(sd, &cri[i]);
 521}
 522
 523static int adv7511_log_status(struct v4l2_subdev *sd)
 524{
 525        struct adv7511_state *state = get_adv7511_state(sd);
 526        struct adv7511_state_edid *edid = &state->edid;
 527
 528        static const char * const states[] = {
 529                "in reset",
 530                "reading EDID",
 531                "idle",
 532                "initializing HDCP",
 533                "HDCP enabled",
 534                "initializing HDCP repeater",
 535                "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"
 536        };
 537        static const char * const errors[] = {
 538                "no error",
 539                "bad receiver BKSV",
 540                "Ri mismatch",
 541                "Pj mismatch",
 542                "i2c error",
 543                "timed out",
 544                "max repeater cascade exceeded",
 545                "hash check failed",
 546                "too many devices",
 547                "9", "A", "B", "C", "D", "E", "F"
 548        };
 549
 550        v4l2_info(sd, "power %s\n", state->power_on ? "on" : "off");
 551        v4l2_info(sd, "%s hotplug, %s Rx Sense, %s EDID (%d block(s))\n",
 552                  (adv7511_rd(sd, 0x42) & MASK_ADV7511_HPD_DETECT) ? "detected" : "no",
 553                  (adv7511_rd(sd, 0x42) & MASK_ADV7511_MSEN_DETECT) ? "detected" : "no",
 554                  edid->segments ? "found" : "no",
 555                  edid->blocks);
 556        v4l2_info(sd, "%s output %s\n",
 557                  (adv7511_rd(sd, 0xaf) & 0x02) ?
 558                  "HDMI" : "DVI-D",
 559                  (adv7511_rd(sd, 0xa1) & 0x3c) ?
 560                  "disabled" : "enabled");
 561        v4l2_info(sd, "state: %s, error: %s, detect count: %u, msk/irq: %02x/%02x\n",
 562                          states[adv7511_rd(sd, 0xc8) & 0xf],
 563                          errors[adv7511_rd(sd, 0xc8) >> 4], state->edid_detect_counter,
 564                          adv7511_rd(sd, 0x94), adv7511_rd(sd, 0x96));
 565        v4l2_info(sd, "RGB quantization: %s range\n", adv7511_rd(sd, 0x18) & 0x80 ? "limited" : "full");
 566        if (adv7511_rd(sd, 0xaf) & 0x02) {
 567                /* HDMI only */
 568                u8 manual_cts = adv7511_rd(sd, 0x0a) & 0x80;
 569                u32 N = (adv7511_rd(sd, 0x01) & 0xf) << 16 |
 570                        adv7511_rd(sd, 0x02) << 8 |
 571                        adv7511_rd(sd, 0x03);
 572                u8 vic_detect = adv7511_rd(sd, 0x3e) >> 2;
 573                u8 vic_sent = adv7511_rd(sd, 0x3d) & 0x3f;
 574                u32 CTS;
 575
 576                if (manual_cts)
 577                        CTS = (adv7511_rd(sd, 0x07) & 0xf) << 16 |
 578                              adv7511_rd(sd, 0x08) << 8 |
 579                              adv7511_rd(sd, 0x09);
 580                else
 581                        CTS = (adv7511_rd(sd, 0x04) & 0xf) << 16 |
 582                              adv7511_rd(sd, 0x05) << 8 |
 583                              adv7511_rd(sd, 0x06);
 584                v4l2_info(sd, "CTS %s mode: N %d, CTS %d\n",
 585                          manual_cts ? "manual" : "automatic", N, CTS);
 586                v4l2_info(sd, "VIC: detected %d, sent %d\n",
 587                          vic_detect, vic_sent);
 588                adv7511_log_infoframes(sd);
 589        }
 590        if (state->dv_timings.type == V4L2_DV_BT_656_1120)
 591                v4l2_print_dv_timings(sd->name, "timings: ",
 592                                &state->dv_timings, false);
 593        else
 594                v4l2_info(sd, "no timings set\n");
 595        v4l2_info(sd, "i2c edid addr: 0x%x\n", state->i2c_edid_addr);
 596        v4l2_info(sd, "i2c cec addr: 0x%x\n", state->i2c_cec_addr);
 597        v4l2_info(sd, "i2c pktmem addr: 0x%x\n", state->i2c_pktmem_addr);
 598        return 0;
 599}
 600
 601/* Power up/down adv7511 */
 602static int adv7511_s_power(struct v4l2_subdev *sd, int on)
 603{
 604        struct adv7511_state *state = get_adv7511_state(sd);
 605        const int retries = 20;
 606        int i;
 607
 608        v4l2_dbg(1, debug, sd, "%s: power %s\n", __func__, on ? "on" : "off");
 609
 610        state->power_on = on;
 611
 612        if (!on) {
 613                /* Power down */
 614                adv7511_wr_and_or(sd, 0x41, 0xbf, 0x40);
 615                return true;
 616        }
 617
 618        /* Power up */
 619        /* The adv7511 does not always come up immediately.
 620           Retry multiple times. */
 621        for (i = 0; i < retries; i++) {
 622                adv7511_wr_and_or(sd, 0x41, 0xbf, 0x0);
 623                if ((adv7511_rd(sd, 0x41) & 0x40) == 0)
 624                        break;
 625                adv7511_wr_and_or(sd, 0x41, 0xbf, 0x40);
 626                msleep(10);
 627        }
 628        if (i == retries) {
 629                v4l2_dbg(1, debug, sd, "%s: failed to powerup the adv7511!\n", __func__);
 630                adv7511_s_power(sd, 0);
 631                return false;
 632        }
 633        if (i > 1)
 634                v4l2_dbg(1, debug, sd, "%s: needed %d retries to powerup the adv7511\n", __func__, i);
 635
 636        /* Reserved registers that must be set */
 637        adv7511_wr(sd, 0x98, 0x03);
 638        adv7511_wr_and_or(sd, 0x9a, 0xfe, 0x70);
 639        adv7511_wr(sd, 0x9c, 0x30);
 640        adv7511_wr_and_or(sd, 0x9d, 0xfc, 0x01);
 641        adv7511_wr(sd, 0xa2, 0xa4);
 642        adv7511_wr(sd, 0xa3, 0xa4);
 643        adv7511_wr(sd, 0xe0, 0xd0);
 644        adv7511_wr(sd, 0xf9, 0x00);
 645
 646        adv7511_wr(sd, 0x43, state->i2c_edid_addr);
 647        adv7511_wr(sd, 0x45, state->i2c_pktmem_addr);
 648
 649        /* Set number of attempts to read the EDID */
 650        adv7511_wr(sd, 0xc9, 0xf);
 651        return true;
 652}
 653
 654/* Enable interrupts */
 655static void adv7511_set_isr(struct v4l2_subdev *sd, bool enable)
 656{
 657        u8 irqs = MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT;
 658        u8 irqs_rd;
 659        int retries = 100;
 660
 661        v4l2_dbg(2, debug, sd, "%s: %s\n", __func__, enable ? "enable" : "disable");
 662
 663        /* The datasheet says that the EDID ready interrupt should be
 664           disabled if there is no hotplug. */
 665        if (!enable)
 666                irqs = 0;
 667        else if (adv7511_have_hotplug(sd))
 668                irqs |= MASK_ADV7511_EDID_RDY_INT;
 669
 670        /*
 671         * This i2c write can fail (approx. 1 in 1000 writes). But it
 672         * is essential that this register is correct, so retry it
 673         * multiple times.
 674         *
 675         * Note that the i2c write does not report an error, but the readback
 676         * clearly shows the wrong value.
 677         */
 678        do {
 679                adv7511_wr(sd, 0x94, irqs);
 680                irqs_rd = adv7511_rd(sd, 0x94);
 681        } while (retries-- && irqs_rd != irqs);
 682
 683        if (irqs_rd == irqs)
 684                return;
 685        v4l2_err(sd, "Could not set interrupts: hw failure?\n");
 686}
 687
 688/* Interrupt handler */
 689static int adv7511_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
 690{
 691        u8 irq_status;
 692
 693        /* disable interrupts to prevent a race condition */
 694        adv7511_set_isr(sd, false);
 695        irq_status = adv7511_rd(sd, 0x96);
 696        /* clear detected interrupts */
 697        adv7511_wr(sd, 0x96, irq_status);
 698
 699        v4l2_dbg(1, debug, sd, "%s: irq 0x%x\n", __func__, irq_status);
 700
 701        if (irq_status & (MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT))
 702                adv7511_check_monitor_present_status(sd);
 703        if (irq_status & MASK_ADV7511_EDID_RDY_INT)
 704                adv7511_check_edid_status(sd);
 705
 706        /* enable interrupts */
 707        adv7511_set_isr(sd, true);
 708
 709        if (handled)
 710                *handled = true;
 711        return 0;
 712}
 713
 714static const struct v4l2_subdev_core_ops adv7511_core_ops = {
 715        .log_status = adv7511_log_status,
 716#ifdef CONFIG_VIDEO_ADV_DEBUG
 717        .g_register = adv7511_g_register,
 718        .s_register = adv7511_s_register,
 719#endif
 720        .s_power = adv7511_s_power,
 721        .interrupt_service_routine = adv7511_isr,
 722};
 723
 724/* ------------------------------ VIDEO OPS ------------------------------ */
 725
 726/* Enable/disable adv7511 output */
 727static int adv7511_s_stream(struct v4l2_subdev *sd, int enable)
 728{
 729        struct adv7511_state *state = get_adv7511_state(sd);
 730
 731        v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
 732        adv7511_wr_and_or(sd, 0xa1, ~0x3c, (enable ? 0 : 0x3c));
 733        if (enable) {
 734                adv7511_check_monitor_present_status(sd);
 735        } else {
 736                adv7511_s_power(sd, 0);
 737                state->have_monitor = false;
 738        }
 739        return 0;
 740}
 741
 742static int adv7511_s_dv_timings(struct v4l2_subdev *sd,
 743                               struct v4l2_dv_timings *timings)
 744{
 745        struct adv7511_state *state = get_adv7511_state(sd);
 746
 747        v4l2_dbg(1, debug, sd, "%s:\n", __func__);
 748
 749        /* quick sanity check */
 750        if (!v4l2_valid_dv_timings(timings, &adv7511_timings_cap, NULL, NULL))
 751                return -EINVAL;
 752
 753        /* Fill the optional fields .standards and .flags in struct v4l2_dv_timings
 754           if the format is one of the CEA or DMT timings. */
 755        v4l2_find_dv_timings_cap(timings, &adv7511_timings_cap, 0, NULL, NULL);
 756
 757        timings->bt.flags &= ~V4L2_DV_FL_REDUCED_FPS;
 758
 759        /* save timings */
 760        state->dv_timings = *timings;
 761
 762        /* update quantization range based on new dv_timings */
 763        adv7511_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
 764
 765        /* update AVI infoframe */
 766        adv7511_set_IT_content_AVI_InfoFrame(sd);
 767
 768        return 0;
 769}
 770
 771static int adv7511_g_dv_timings(struct v4l2_subdev *sd,
 772                                struct v4l2_dv_timings *timings)
 773{
 774        struct adv7511_state *state = get_adv7511_state(sd);
 775
 776        v4l2_dbg(1, debug, sd, "%s:\n", __func__);
 777
 778        if (!timings)
 779                return -EINVAL;
 780
 781        *timings = state->dv_timings;
 782
 783        return 0;
 784}
 785
 786static int adv7511_enum_dv_timings(struct v4l2_subdev *sd,
 787                                   struct v4l2_enum_dv_timings *timings)
 788{
 789        if (timings->pad != 0)
 790                return -EINVAL;
 791
 792        return v4l2_enum_dv_timings_cap(timings, &adv7511_timings_cap, NULL, NULL);
 793}
 794
 795static int adv7511_dv_timings_cap(struct v4l2_subdev *sd,
 796                                  struct v4l2_dv_timings_cap *cap)
 797{
 798        if (cap->pad != 0)
 799                return -EINVAL;
 800
 801        *cap = adv7511_timings_cap;
 802        return 0;
 803}
 804
 805static const struct v4l2_subdev_video_ops adv7511_video_ops = {
 806        .s_stream = adv7511_s_stream,
 807        .s_dv_timings = adv7511_s_dv_timings,
 808        .g_dv_timings = adv7511_g_dv_timings,
 809};
 810
 811/* ------------------------------ AUDIO OPS ------------------------------ */
 812static int adv7511_s_audio_stream(struct v4l2_subdev *sd, int enable)
 813{
 814        v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
 815
 816        if (enable)
 817                adv7511_wr_and_or(sd, 0x4b, 0x3f, 0x80);
 818        else
 819                adv7511_wr_and_or(sd, 0x4b, 0x3f, 0x40);
 820
 821        return 0;
 822}
 823
 824static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq)
 825{
 826        u32 N;
 827
 828        switch (freq) {
 829        case 32000:  N = 4096;  break;
 830        case 44100:  N = 6272;  break;
 831        case 48000:  N = 6144;  break;
 832        case 88200:  N = 12544; break;
 833        case 96000:  N = 12288; break;
 834        case 176400: N = 25088; break;
 835        case 192000: N = 24576; break;
 836        default:
 837                return -EINVAL;
 838        }
 839
 840        /* Set N (used with CTS to regenerate the audio clock) */
 841        adv7511_wr(sd, 0x01, (N >> 16) & 0xf);
 842        adv7511_wr(sd, 0x02, (N >> 8) & 0xff);
 843        adv7511_wr(sd, 0x03, N & 0xff);
 844
 845        return 0;
 846}
 847
 848static int adv7511_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq)
 849{
 850        u32 i2s_sf;
 851
 852        switch (freq) {
 853        case 32000:  i2s_sf = 0x30; break;
 854        case 44100:  i2s_sf = 0x00; break;
 855        case 48000:  i2s_sf = 0x20; break;
 856        case 88200:  i2s_sf = 0x80; break;
 857        case 96000:  i2s_sf = 0xa0; break;
 858        case 176400: i2s_sf = 0xc0; break;
 859        case 192000: i2s_sf = 0xe0; break;
 860        default:
 861                return -EINVAL;
 862        }
 863
 864        /* Set sampling frequency for I2S audio to 48 kHz */
 865        adv7511_wr_and_or(sd, 0x15, 0xf, i2s_sf);
 866
 867        return 0;
 868}
 869
 870static int adv7511_s_routing(struct v4l2_subdev *sd, u32 input, u32 output, u32 config)
 871{
 872        /* Only 2 channels in use for application */
 873        adv7511_wr_and_or(sd, 0x73, 0xf8, 0x1);
 874        /* Speaker mapping */
 875        adv7511_wr(sd, 0x76, 0x00);
 876
 877        /* 16 bit audio word length */
 878        adv7511_wr_and_or(sd, 0x14, 0xf0, 0x02);
 879
 880        return 0;
 881}
 882
 883static const struct v4l2_subdev_audio_ops adv7511_audio_ops = {
 884        .s_stream = adv7511_s_audio_stream,
 885        .s_clock_freq = adv7511_s_clock_freq,
 886        .s_i2s_clock_freq = adv7511_s_i2s_clock_freq,
 887        .s_routing = adv7511_s_routing,
 888};
 889
 890/* ---------------------------- PAD OPS ------------------------------------- */
 891
 892static int adv7511_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
 893{
 894        struct adv7511_state *state = get_adv7511_state(sd);
 895
 896        memset(edid->reserved, 0, sizeof(edid->reserved));
 897
 898        if (edid->pad != 0)
 899                return -EINVAL;
 900
 901        if (edid->start_block == 0 && edid->blocks == 0) {
 902                edid->blocks = state->edid.segments * 2;
 903                return 0;
 904        }
 905
 906        if (state->edid.segments == 0)
 907                return -ENODATA;
 908
 909        if (edid->start_block >= state->edid.segments * 2)
 910                return -EINVAL;
 911
 912        if (edid->start_block + edid->blocks > state->edid.segments * 2)
 913                edid->blocks = state->edid.segments * 2 - edid->start_block;
 914
 915        memcpy(edid->edid, &state->edid.data[edid->start_block * 128],
 916                        128 * edid->blocks);
 917
 918        return 0;
 919}
 920
 921static int adv7511_enum_mbus_code(struct v4l2_subdev *sd,
 922                                  struct v4l2_subdev_pad_config *cfg,
 923                                  struct v4l2_subdev_mbus_code_enum *code)
 924{
 925        if (code->pad != 0)
 926                return -EINVAL;
 927
 928        switch (code->index) {
 929        case 0:
 930                code->code = MEDIA_BUS_FMT_RGB888_1X24;
 931                break;
 932        case 1:
 933                code->code = MEDIA_BUS_FMT_YUYV8_1X16;
 934                break;
 935        case 2:
 936                code->code = MEDIA_BUS_FMT_UYVY8_1X16;
 937                break;
 938        default:
 939                return -EINVAL;
 940        }
 941        return 0;
 942}
 943
 944static void adv7511_fill_format(struct adv7511_state *state,
 945                                struct v4l2_mbus_framefmt *format)
 946{
 947        memset(format, 0, sizeof(*format));
 948
 949        format->width = state->dv_timings.bt.width;
 950        format->height = state->dv_timings.bt.height;
 951        format->field = V4L2_FIELD_NONE;
 952}
 953
 954static int adv7511_get_fmt(struct v4l2_subdev *sd,
 955                           struct v4l2_subdev_pad_config *cfg,
 956                           struct v4l2_subdev_format *format)
 957{
 958        struct adv7511_state *state = get_adv7511_state(sd);
 959
 960        if (format->pad != 0)
 961                return -EINVAL;
 962
 963        adv7511_fill_format(state, &format->format);
 964
 965        if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
 966                struct v4l2_mbus_framefmt *fmt;
 967
 968                fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
 969                format->format.code = fmt->code;
 970                format->format.colorspace = fmt->colorspace;
 971                format->format.ycbcr_enc = fmt->ycbcr_enc;
 972                format->format.quantization = fmt->quantization;
 973                format->format.xfer_func = fmt->xfer_func;
 974        } else {
 975                format->format.code = state->fmt_code;
 976                format->format.colorspace = state->colorspace;
 977                format->format.ycbcr_enc = state->ycbcr_enc;
 978                format->format.quantization = state->quantization;
 979                format->format.xfer_func = state->xfer_func;
 980        }
 981
 982        return 0;
 983}
 984
 985static int adv7511_set_fmt(struct v4l2_subdev *sd,
 986                           struct v4l2_subdev_pad_config *cfg,
 987                           struct v4l2_subdev_format *format)
 988{
 989        struct adv7511_state *state = get_adv7511_state(sd);
 990        /*
 991         * Bitfield namings come the CEA-861-F standard, table 8 "Auxiliary
 992         * Video Information (AVI) InfoFrame Format"
 993         *
 994         * c = Colorimetry
 995         * ec = Extended Colorimetry
 996         * y = RGB or YCbCr
 997         * q = RGB Quantization Range
 998         * yq = YCC Quantization Range
 999         */
1000        u8 c = HDMI_COLORIMETRY_NONE;
1001        u8 ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1002        u8 y = HDMI_COLORSPACE_RGB;
1003        u8 q = HDMI_QUANTIZATION_RANGE_DEFAULT;
1004        u8 yq = HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
1005
1006        if (format->pad != 0)
1007                return -EINVAL;
1008        switch (format->format.code) {
1009        case MEDIA_BUS_FMT_UYVY8_1X16:
1010        case MEDIA_BUS_FMT_YUYV8_1X16:
1011        case MEDIA_BUS_FMT_RGB888_1X24:
1012                break;
1013        default:
1014                return -EINVAL;
1015        }
1016
1017        adv7511_fill_format(state, &format->format);
1018        if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
1019                struct v4l2_mbus_framefmt *fmt;
1020
1021                fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
1022                fmt->code = format->format.code;
1023                fmt->colorspace = format->format.colorspace;
1024                fmt->ycbcr_enc = format->format.ycbcr_enc;
1025                fmt->quantization = format->format.quantization;
1026                fmt->xfer_func = format->format.xfer_func;
1027                return 0;
1028        }
1029
1030        switch (format->format.code) {
1031        case MEDIA_BUS_FMT_UYVY8_1X16:
1032                adv7511_wr_and_or(sd, 0x15, 0xf0, 0x01);
1033                adv7511_wr_and_or(sd, 0x16, 0x03, 0xb8);
1034                y = HDMI_COLORSPACE_YUV422;
1035                break;
1036        case MEDIA_BUS_FMT_YUYV8_1X16:
1037                adv7511_wr_and_or(sd, 0x15, 0xf0, 0x01);
1038                adv7511_wr_and_or(sd, 0x16, 0x03, 0xbc);
1039                y = HDMI_COLORSPACE_YUV422;
1040                break;
1041        case MEDIA_BUS_FMT_RGB888_1X24:
1042        default:
1043                adv7511_wr_and_or(sd, 0x15, 0xf0, 0x00);
1044                adv7511_wr_and_or(sd, 0x16, 0x03, 0x00);
1045                break;
1046        }
1047        state->fmt_code = format->format.code;
1048        state->colorspace = format->format.colorspace;
1049        state->ycbcr_enc = format->format.ycbcr_enc;
1050        state->quantization = format->format.quantization;
1051        state->xfer_func = format->format.xfer_func;
1052
1053        switch (format->format.colorspace) {
1054        case V4L2_COLORSPACE_ADOBERGB:
1055                c = HDMI_COLORIMETRY_EXTENDED;
1056                ec = y ? HDMI_EXTENDED_COLORIMETRY_ADOBE_YCC_601 :
1057                         HDMI_EXTENDED_COLORIMETRY_ADOBE_RGB;
1058                break;
1059        case V4L2_COLORSPACE_SMPTE170M:
1060                c = y ? HDMI_COLORIMETRY_ITU_601 : HDMI_COLORIMETRY_NONE;
1061                if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_XV601) {
1062                        c = HDMI_COLORIMETRY_EXTENDED;
1063                        ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1064                }
1065                break;
1066        case V4L2_COLORSPACE_REC709:
1067                c = y ? HDMI_COLORIMETRY_ITU_709 : HDMI_COLORIMETRY_NONE;
1068                if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_XV709) {
1069                        c = HDMI_COLORIMETRY_EXTENDED;
1070                        ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
1071                }
1072                break;
1073        case V4L2_COLORSPACE_SRGB:
1074                c = y ? HDMI_COLORIMETRY_EXTENDED : HDMI_COLORIMETRY_NONE;
1075                ec = y ? HDMI_EXTENDED_COLORIMETRY_S_YCC_601 :
1076                         HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
1077                break;
1078        case V4L2_COLORSPACE_BT2020:
1079                c = HDMI_COLORIMETRY_EXTENDED;
1080                if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_BT2020_CONST_LUM)
1081                        ec = 5; /* Not yet available in hdmi.h */
1082                else
1083                        ec = 6; /* Not yet available in hdmi.h */
1084                break;
1085        default:
1086                break;
1087        }
1088
1089        /*
1090         * CEA-861-F says that for RGB formats the YCC range must match the
1091         * RGB range, although sources should ignore the YCC range.
1092         *
1093         * The RGB quantization range shouldn't be non-zero if the EDID doesn't
1094         * have the Q bit set in the Video Capabilities Data Block, however this
1095         * isn't checked at the moment. The assumption is that the application
1096         * knows the EDID and can detect this.
1097         *
1098         * The same is true for the YCC quantization range: non-standard YCC
1099         * quantization ranges should only be sent if the EDID has the YQ bit
1100         * set in the Video Capabilities Data Block.
1101         */
1102        switch (format->format.quantization) {
1103        case V4L2_QUANTIZATION_FULL_RANGE:
1104                q = y ? HDMI_QUANTIZATION_RANGE_DEFAULT :
1105                        HDMI_QUANTIZATION_RANGE_FULL;
1106                yq = q ? q - 1 : HDMI_YCC_QUANTIZATION_RANGE_FULL;
1107                break;
1108        case V4L2_QUANTIZATION_LIM_RANGE:
1109                q = y ? HDMI_QUANTIZATION_RANGE_DEFAULT :
1110                        HDMI_QUANTIZATION_RANGE_LIMITED;
1111                yq = q ? q - 1 : HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
1112                break;
1113        }
1114
1115        adv7511_wr_and_or(sd, 0x4a, 0xbf, 0);
1116        adv7511_wr_and_or(sd, 0x55, 0x9f, y << 5);
1117        adv7511_wr_and_or(sd, 0x56, 0x3f, c << 6);
1118        adv7511_wr_and_or(sd, 0x57, 0x83, (ec << 4) | (q << 2));
1119        adv7511_wr_and_or(sd, 0x59, 0x0f, yq << 4);
1120        adv7511_wr_and_or(sd, 0x4a, 0xff, 1);
1121
1122        return 0;
1123}
1124
1125static const struct v4l2_subdev_pad_ops adv7511_pad_ops = {
1126        .get_edid = adv7511_get_edid,
1127        .enum_mbus_code = adv7511_enum_mbus_code,
1128        .get_fmt = adv7511_get_fmt,
1129        .set_fmt = adv7511_set_fmt,
1130        .enum_dv_timings = adv7511_enum_dv_timings,
1131        .dv_timings_cap = adv7511_dv_timings_cap,
1132};
1133
1134/* --------------------- SUBDEV OPS --------------------------------------- */
1135
1136static const struct v4l2_subdev_ops adv7511_ops = {
1137        .core  = &adv7511_core_ops,
1138        .pad  = &adv7511_pad_ops,
1139        .video = &adv7511_video_ops,
1140        .audio = &adv7511_audio_ops,
1141};
1142
1143/* ----------------------------------------------------------------------- */
1144static void adv7511_dbg_dump_edid(int lvl, int debug, struct v4l2_subdev *sd, int segment, u8 *buf)
1145{
1146        if (debug >= lvl) {
1147                int i, j;
1148                v4l2_dbg(lvl, debug, sd, "edid segment %d\n", segment);
1149                for (i = 0; i < 256; i += 16) {
1150                        u8 b[128];
1151                        u8 *bp = b;
1152                        if (i == 128)
1153                                v4l2_dbg(lvl, debug, sd, "\n");
1154                        for (j = i; j < i + 16; j++) {
1155                                sprintf(bp, "0x%02x, ", buf[j]);
1156                                bp += 6;
1157                        }
1158                        bp[0] = '\0';
1159                        v4l2_dbg(lvl, debug, sd, "%s\n", b);
1160                }
1161        }
1162}
1163
1164static void adv7511_edid_handler(struct work_struct *work)
1165{
1166        struct delayed_work *dwork = to_delayed_work(work);
1167        struct adv7511_state *state = container_of(dwork, struct adv7511_state, edid_handler);
1168        struct v4l2_subdev *sd = &state->sd;
1169        struct adv7511_edid_detect ed;
1170
1171        v4l2_dbg(1, debug, sd, "%s:\n", __func__);
1172
1173        if (adv7511_check_edid_status(sd)) {
1174                /* Return if we received the EDID. */
1175                return;
1176        }
1177
1178        if (adv7511_have_hotplug(sd)) {
1179                /* We must retry reading the EDID several times, it is possible
1180                 * that initially the EDID couldn't be read due to i2c errors
1181                 * (DVI connectors are particularly prone to this problem). */
1182                if (state->edid.read_retries) {
1183                        state->edid.read_retries--;
1184                        v4l2_dbg(1, debug, sd, "%s: edid read failed\n", __func__);
1185                        state->have_monitor = false;
1186                        adv7511_s_power(sd, false);
1187                        adv7511_s_power(sd, true);
1188                        queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
1189                        return;
1190                }
1191        }
1192
1193        /* We failed to read the EDID, so send an event for this. */
1194        ed.present = false;
1195        ed.segment = adv7511_rd(sd, 0xc4);
1196        v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
1197        v4l2_dbg(1, debug, sd, "%s: no edid found\n", __func__);
1198}
1199
1200static void adv7511_audio_setup(struct v4l2_subdev *sd)
1201{
1202        v4l2_dbg(1, debug, sd, "%s\n", __func__);
1203
1204        adv7511_s_i2s_clock_freq(sd, 48000);
1205        adv7511_s_clock_freq(sd, 48000);
1206        adv7511_s_routing(sd, 0, 0, 0);
1207}
1208
1209/* Configure hdmi transmitter. */
1210static void adv7511_setup(struct v4l2_subdev *sd)
1211{
1212        struct adv7511_state *state = get_adv7511_state(sd);
1213        v4l2_dbg(1, debug, sd, "%s\n", __func__);
1214
1215        /* Input format: RGB 4:4:4 */
1216        adv7511_wr_and_or(sd, 0x15, 0xf0, 0x0);
1217        /* Output format: RGB 4:4:4 */
1218        adv7511_wr_and_or(sd, 0x16, 0x7f, 0x0);
1219        /* 1st order interpolation 4:2:2 -> 4:4:4 up conversion, Aspect ratio: 16:9 */
1220        adv7511_wr_and_or(sd, 0x17, 0xf9, 0x06);
1221        /* Disable pixel repetition */
1222        adv7511_wr_and_or(sd, 0x3b, 0x9f, 0x0);
1223        /* Disable CSC */
1224        adv7511_wr_and_or(sd, 0x18, 0x7f, 0x0);
1225        /* Output format: RGB 4:4:4, Active Format Information is valid,
1226         * underscanned */
1227        adv7511_wr_and_or(sd, 0x55, 0x9c, 0x12);
1228        /* AVI Info frame packet enable, Audio Info frame disable */
1229        adv7511_wr_and_or(sd, 0x44, 0xe7, 0x10);
1230        /* Colorimetry, Active format aspect ratio: same as picure. */
1231        adv7511_wr(sd, 0x56, 0xa8);
1232        /* No encryption */
1233        adv7511_wr_and_or(sd, 0xaf, 0xed, 0x0);
1234
1235        /* Positive clk edge capture for input video clock */
1236        adv7511_wr_and_or(sd, 0xba, 0x1f, 0x60);
1237
1238        adv7511_audio_setup(sd);
1239
1240        v4l2_ctrl_handler_setup(&state->hdl);
1241}
1242
1243static void adv7511_notify_monitor_detect(struct v4l2_subdev *sd)
1244{
1245        struct adv7511_monitor_detect mdt;
1246        struct adv7511_state *state = get_adv7511_state(sd);
1247
1248        mdt.present = state->have_monitor;
1249        v4l2_subdev_notify(sd, ADV7511_MONITOR_DETECT, (void *)&mdt);
1250}
1251
1252static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd)
1253{
1254        struct adv7511_state *state = get_adv7511_state(sd);
1255        /* read hotplug and rx-sense state */
1256        u8 status = adv7511_rd(sd, 0x42);
1257
1258        v4l2_dbg(1, debug, sd, "%s: status: 0x%x%s%s\n",
1259                         __func__,
1260                         status,
1261                         status & MASK_ADV7511_HPD_DETECT ? ", hotplug" : "",
1262                         status & MASK_ADV7511_MSEN_DETECT ? ", rx-sense" : "");
1263
1264        /* update read only ctrls */
1265        v4l2_ctrl_s_ctrl(state->hotplug_ctrl, adv7511_have_hotplug(sd) ? 0x1 : 0x0);
1266        v4l2_ctrl_s_ctrl(state->rx_sense_ctrl, adv7511_have_rx_sense(sd) ? 0x1 : 0x0);
1267        v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, state->edid.segments ? 0x1 : 0x0);
1268
1269        if ((status & MASK_ADV7511_HPD_DETECT) && ((status & MASK_ADV7511_MSEN_DETECT) || state->edid.segments)) {
1270                v4l2_dbg(1, debug, sd, "%s: hotplug and (rx-sense or edid)\n", __func__);
1271                if (!state->have_monitor) {
1272                        v4l2_dbg(1, debug, sd, "%s: monitor detected\n", __func__);
1273                        state->have_monitor = true;
1274                        adv7511_set_isr(sd, true);
1275                        if (!adv7511_s_power(sd, true)) {
1276                                v4l2_dbg(1, debug, sd, "%s: monitor detected, powerup failed\n", __func__);
1277                                return;
1278                        }
1279                        adv7511_setup(sd);
1280                        adv7511_notify_monitor_detect(sd);
1281                        state->edid.read_retries = EDID_MAX_RETRIES;
1282                        queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
1283                }
1284        } else if (status & MASK_ADV7511_HPD_DETECT) {
1285                v4l2_dbg(1, debug, sd, "%s: hotplug detected\n", __func__);
1286                state->edid.read_retries = EDID_MAX_RETRIES;
1287                queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
1288        } else if (!(status & MASK_ADV7511_HPD_DETECT)) {
1289                v4l2_dbg(1, debug, sd, "%s: hotplug not detected\n", __func__);
1290                if (state->have_monitor) {
1291                        v4l2_dbg(1, debug, sd, "%s: monitor not detected\n", __func__);
1292                        state->have_monitor = false;
1293                        adv7511_notify_monitor_detect(sd);
1294                }
1295                adv7511_s_power(sd, false);
1296                memset(&state->edid, 0, sizeof(struct adv7511_state_edid));
1297        }
1298}
1299
1300static bool edid_block_verify_crc(u8 *edid_block)
1301{
1302        u8 sum = 0;
1303        int i;
1304
1305        for (i = 0; i < 128; i++)
1306                sum += edid_block[i];
1307        return sum == 0;
1308}
1309
1310static bool edid_verify_crc(struct v4l2_subdev *sd, u32 segment)
1311{
1312        struct adv7511_state *state = get_adv7511_state(sd);
1313        u32 blocks = state->edid.blocks;
1314        u8 *data = state->edid.data;
1315
1316        if (!edid_block_verify_crc(&data[segment * 256]))
1317                return false;
1318        if ((segment + 1) * 2 <= blocks)
1319                return edid_block_verify_crc(&data[segment * 256 + 128]);
1320        return true;
1321}
1322
1323static bool edid_verify_header(struct v4l2_subdev *sd, u32 segment)
1324{
1325        static const u8 hdmi_header[] = {
1326                0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
1327        };
1328        struct adv7511_state *state = get_adv7511_state(sd);
1329        u8 *data = state->edid.data;
1330
1331        if (segment != 0)
1332                return true;
1333        return !memcmp(data, hdmi_header, sizeof(hdmi_header));
1334}
1335
1336static bool adv7511_check_edid_status(struct v4l2_subdev *sd)
1337{
1338        struct adv7511_state *state = get_adv7511_state(sd);
1339        u8 edidRdy = adv7511_rd(sd, 0xc5);
1340
1341        v4l2_dbg(1, debug, sd, "%s: edid ready (retries: %d)\n",
1342                         __func__, EDID_MAX_RETRIES - state->edid.read_retries);
1343
1344        if (state->edid.complete)
1345                return true;
1346
1347        if (edidRdy & MASK_ADV7511_EDID_RDY) {
1348                int segment = adv7511_rd(sd, 0xc4);
1349                struct adv7511_edid_detect ed;
1350
1351                if (segment >= EDID_MAX_SEGM) {
1352                        v4l2_err(sd, "edid segment number too big\n");
1353                        return false;
1354                }
1355                v4l2_dbg(1, debug, sd, "%s: got segment %d\n", __func__, segment);
1356                adv7511_edid_rd(sd, 256, &state->edid.data[segment * 256]);
1357                adv7511_dbg_dump_edid(2, debug, sd, segment, &state->edid.data[segment * 256]);
1358                if (segment == 0) {
1359                        state->edid.blocks = state->edid.data[0x7e] + 1;
1360                        v4l2_dbg(1, debug, sd, "%s: %d blocks in total\n", __func__, state->edid.blocks);
1361                }
1362                if (!edid_verify_crc(sd, segment) ||
1363                    !edid_verify_header(sd, segment)) {
1364                        /* edid crc error, force reread of edid segment */
1365                        v4l2_err(sd, "%s: edid crc or header error\n", __func__);
1366                        state->have_monitor = false;
1367                        adv7511_s_power(sd, false);
1368                        adv7511_s_power(sd, true);
1369                        return false;
1370                }
1371                /* one more segment read ok */
1372                state->edid.segments = segment + 1;
1373                if (((state->edid.data[0x7e] >> 1) + 1) > state->edid.segments) {
1374                        /* Request next EDID segment */
1375                        v4l2_dbg(1, debug, sd, "%s: request segment %d\n", __func__, state->edid.segments);
1376                        adv7511_wr(sd, 0xc9, 0xf);
1377                        adv7511_wr(sd, 0xc4, state->edid.segments);
1378                        state->edid.read_retries = EDID_MAX_RETRIES;
1379                        queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
1380                        return false;
1381                }
1382
1383                v4l2_dbg(1, debug, sd, "%s: edid complete with %d segment(s)\n", __func__, state->edid.segments);
1384                state->edid.complete = true;
1385
1386                /* report when we have all segments
1387                   but report only for segment 0
1388                 */
1389                ed.present = true;
1390                ed.segment = 0;
1391                state->edid_detect_counter++;
1392                v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, state->edid.segments ? 0x1 : 0x0);
1393                v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
1394                return ed.present;
1395        }
1396
1397        return false;
1398}
1399
1400/* ----------------------------------------------------------------------- */
1401/* Setup ADV7511 */
1402static void adv7511_init_setup(struct v4l2_subdev *sd)
1403{
1404        struct adv7511_state *state = get_adv7511_state(sd);
1405        struct adv7511_state_edid *edid = &state->edid;
1406
1407        v4l2_dbg(1, debug, sd, "%s\n", __func__);
1408
1409        /* clear all interrupts */
1410        adv7511_wr(sd, 0x96, 0xff);
1411        /*
1412         * Stop HPD from resetting a lot of registers.
1413         * It might leave the chip in a partly un-initialized state,
1414         * in particular with regards to hotplug bounces.
1415         */
1416        adv7511_wr_and_or(sd, 0xd6, 0x3f, 0xc0);
1417        memset(edid, 0, sizeof(struct adv7511_state_edid));
1418        state->have_monitor = false;
1419        adv7511_set_isr(sd, false);
1420        adv7511_s_stream(sd, false);
1421        adv7511_s_audio_stream(sd, false);
1422}
1423
1424static int adv7511_probe(struct i2c_client *client, const struct i2c_device_id *id)
1425{
1426        struct adv7511_state *state;
1427        struct adv7511_platform_data *pdata = client->dev.platform_data;
1428        struct v4l2_ctrl_handler *hdl;
1429        struct v4l2_subdev *sd;
1430        u8 chip_id[2];
1431        int err = -EIO;
1432
1433        /* Check if the adapter supports the needed features */
1434        if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1435                return -EIO;
1436
1437        state = devm_kzalloc(&client->dev, sizeof(struct adv7511_state), GFP_KERNEL);
1438        if (!state)
1439                return -ENOMEM;
1440
1441        /* Platform data */
1442        if (!pdata) {
1443                v4l_err(client, "No platform data!\n");
1444                return -ENODEV;
1445        }
1446        memcpy(&state->pdata, pdata, sizeof(state->pdata));
1447        state->fmt_code = MEDIA_BUS_FMT_RGB888_1X24;
1448        state->colorspace = V4L2_COLORSPACE_SRGB;
1449
1450        sd = &state->sd;
1451
1452        v4l2_dbg(1, debug, sd, "detecting adv7511 client on address 0x%x\n",
1453                         client->addr << 1);
1454
1455        v4l2_i2c_subdev_init(sd, client, &adv7511_ops);
1456
1457        hdl = &state->hdl;
1458        v4l2_ctrl_handler_init(hdl, 10);
1459        /* add in ascending ID order */
1460        state->hdmi_mode_ctrl = v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
1461                        V4L2_CID_DV_TX_MODE, V4L2_DV_TX_MODE_HDMI,
1462                        0, V4L2_DV_TX_MODE_DVI_D);
1463        state->hotplug_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1464                        V4L2_CID_DV_TX_HOTPLUG, 0, 1, 0, 0);
1465        state->rx_sense_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1466                        V4L2_CID_DV_TX_RXSENSE, 0, 1, 0, 0);
1467        state->have_edid0_ctrl = v4l2_ctrl_new_std(hdl, NULL,
1468                        V4L2_CID_DV_TX_EDID_PRESENT, 0, 1, 0, 0);
1469        state->rgb_quantization_range_ctrl =
1470                v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
1471                        V4L2_CID_DV_TX_RGB_RANGE, V4L2_DV_RGB_RANGE_FULL,
1472                        0, V4L2_DV_RGB_RANGE_AUTO);
1473        sd->ctrl_handler = hdl;
1474        if (hdl->error) {
1475                err = hdl->error;
1476                goto err_hdl;
1477        }
1478        state->hdmi_mode_ctrl->is_private = true;
1479        state->hotplug_ctrl->is_private = true;
1480        state->rx_sense_ctrl->is_private = true;
1481        state->have_edid0_ctrl->is_private = true;
1482        state->rgb_quantization_range_ctrl->is_private = true;
1483
1484        state->pad.flags = MEDIA_PAD_FL_SINK;
1485        err = media_entity_init(&sd->entity, 1, &state->pad, 0);
1486        if (err)
1487                goto err_hdl;
1488
1489        /* EDID and CEC i2c addr */
1490        state->i2c_edid_addr = state->pdata.i2c_edid << 1;
1491        state->i2c_cec_addr = state->pdata.i2c_cec << 1;
1492        state->i2c_pktmem_addr = state->pdata.i2c_pktmem << 1;
1493
1494        state->chip_revision = adv7511_rd(sd, 0x0);
1495        chip_id[0] = adv7511_rd(sd, 0xf5);
1496        chip_id[1] = adv7511_rd(sd, 0xf6);
1497        if (chip_id[0] != 0x75 || chip_id[1] != 0x11) {
1498                v4l2_err(sd, "chip_id != 0x7511, read 0x%02x%02x\n", chip_id[0], chip_id[1]);
1499                err = -EIO;
1500                goto err_entity;
1501        }
1502
1503        state->i2c_edid = i2c_new_dummy(client->adapter, state->i2c_edid_addr >> 1);
1504        if (state->i2c_edid == NULL) {
1505                v4l2_err(sd, "failed to register edid i2c client\n");
1506                err = -ENOMEM;
1507                goto err_entity;
1508        }
1509
1510        state->i2c_pktmem = i2c_new_dummy(client->adapter, state->i2c_pktmem_addr >> 1);
1511        if (state->i2c_pktmem == NULL) {
1512                v4l2_err(sd, "failed to register pktmem i2c client\n");
1513                err = -ENOMEM;
1514                goto err_unreg_edid;
1515        }
1516
1517        adv7511_wr(sd, 0xe2, 0x01); /* power down cec section */
1518        state->work_queue = create_singlethread_workqueue(sd->name);
1519        if (state->work_queue == NULL) {
1520                v4l2_err(sd, "could not create workqueue\n");
1521                err = -ENOMEM;
1522                goto err_unreg_pktmem;
1523        }
1524
1525        INIT_DELAYED_WORK(&state->edid_handler, adv7511_edid_handler);
1526
1527        adv7511_init_setup(sd);
1528        adv7511_set_isr(sd, true);
1529        adv7511_check_monitor_present_status(sd);
1530
1531        v4l2_info(sd, "%s found @ 0x%x (%s)\n", client->name,
1532                          client->addr << 1, client->adapter->name);
1533        return 0;
1534
1535err_unreg_pktmem:
1536        i2c_unregister_device(state->i2c_pktmem);
1537err_unreg_edid:
1538        i2c_unregister_device(state->i2c_edid);
1539err_entity:
1540        media_entity_cleanup(&sd->entity);
1541err_hdl:
1542        v4l2_ctrl_handler_free(&state->hdl);
1543        return err;
1544}
1545
1546/* ----------------------------------------------------------------------- */
1547
1548static int adv7511_remove(struct i2c_client *client)
1549{
1550        struct v4l2_subdev *sd = i2c_get_clientdata(client);
1551        struct adv7511_state *state = get_adv7511_state(sd);
1552
1553        state->chip_revision = -1;
1554
1555        v4l2_dbg(1, debug, sd, "%s removed @ 0x%x (%s)\n", client->name,
1556                 client->addr << 1, client->adapter->name);
1557
1558        adv7511_init_setup(sd);
1559        cancel_delayed_work(&state->edid_handler);
1560        i2c_unregister_device(state->i2c_edid);
1561        i2c_unregister_device(state->i2c_pktmem);
1562        destroy_workqueue(state->work_queue);
1563        v4l2_device_unregister_subdev(sd);
1564        media_entity_cleanup(&sd->entity);
1565        v4l2_ctrl_handler_free(sd->ctrl_handler);
1566        return 0;
1567}
1568
1569/* ----------------------------------------------------------------------- */
1570
1571static struct i2c_device_id adv7511_id[] = {
1572        { "adv7511", 0 },
1573        { }
1574};
1575MODULE_DEVICE_TABLE(i2c, adv7511_id);
1576
1577static struct i2c_driver adv7511_driver = {
1578        .driver = {
1579                .name = "adv7511",
1580        },
1581        .probe = adv7511_probe,
1582        .remove = adv7511_remove,
1583        .id_table = adv7511_id,
1584};
1585
1586module_i2c_driver(adv7511_driver);
1587