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