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