cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ad9389b.c (34643B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Analog Devices AD9389B/AD9889B video encoder driver
      4 *
      5 * Copyright 2012 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
      6 */
      7
      8/*
      9 * References (c = chapter, p = page):
     10 * REF_01 - Analog Devices, Programming Guide, AD9889B/AD9389B,
     11 * HDMI Transitter, Rev. A, October 2010
     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/v4l2-dv-timings.h>
     22#include <media/v4l2-device.h>
     23#include <media/v4l2-common.h>
     24#include <media/v4l2-dv-timings.h>
     25#include <media/v4l2-ctrls.h>
     26#include <media/i2c/ad9389b.h>
     27
     28static int debug;
     29module_param(debug, int, 0644);
     30MODULE_PARM_DESC(debug, "debug level (0-2)");
     31
     32MODULE_DESCRIPTION("Analog Devices AD9389B/AD9889B video encoder driver");
     33MODULE_AUTHOR("Hans Verkuil <hans.verkuil@cisco.com>");
     34MODULE_AUTHOR("Martin Bugge <marbugge@cisco.com>");
     35MODULE_LICENSE("GPL");
     36
     37#define MASK_AD9389B_EDID_RDY_INT   0x04
     38#define MASK_AD9389B_MSEN_INT       0x40
     39#define MASK_AD9389B_HPD_INT        0x80
     40
     41#define MASK_AD9389B_HPD_DETECT     0x40
     42#define MASK_AD9389B_MSEN_DETECT    0x20
     43#define MASK_AD9389B_EDID_RDY       0x10
     44
     45#define EDID_MAX_RETRIES (8)
     46#define EDID_DELAY 250
     47#define EDID_MAX_SEGM 8
     48
     49/*
     50**********************************************************************
     51*
     52*  Arrays with configuration parameters for the AD9389B
     53*
     54**********************************************************************
     55*/
     56
     57struct ad9389b_state_edid {
     58	/* total number of blocks */
     59	u32 blocks;
     60	/* Number of segments read */
     61	u32 segments;
     62	u8 data[EDID_MAX_SEGM * 256];
     63	/* Number of EDID read retries left */
     64	unsigned read_retries;
     65};
     66
     67struct ad9389b_state {
     68	struct ad9389b_platform_data pdata;
     69	struct v4l2_subdev sd;
     70	struct media_pad pad;
     71	struct v4l2_ctrl_handler hdl;
     72	int chip_revision;
     73	/* Is the ad9389b powered on? */
     74	bool power_on;
     75	/* Did we receive hotplug and rx-sense signals? */
     76	bool have_monitor;
     77	/* timings from s_dv_timings */
     78	struct v4l2_dv_timings dv_timings;
     79	/* controls */
     80	struct v4l2_ctrl *hdmi_mode_ctrl;
     81	struct v4l2_ctrl *hotplug_ctrl;
     82	struct v4l2_ctrl *rx_sense_ctrl;
     83	struct v4l2_ctrl *have_edid0_ctrl;
     84	struct v4l2_ctrl *rgb_quantization_range_ctrl;
     85	struct i2c_client *edid_i2c_client;
     86	struct ad9389b_state_edid edid;
     87	/* Running counter of the number of detected EDIDs (for debugging) */
     88	unsigned edid_detect_counter;
     89	struct delayed_work edid_handler; /* work entry */
     90};
     91
     92static void ad9389b_check_monitor_present_status(struct v4l2_subdev *sd);
     93static bool ad9389b_check_edid_status(struct v4l2_subdev *sd);
     94static void ad9389b_setup(struct v4l2_subdev *sd);
     95static int ad9389b_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq);
     96static int ad9389b_s_clock_freq(struct v4l2_subdev *sd, u32 freq);
     97
     98static inline struct ad9389b_state *get_ad9389b_state(struct v4l2_subdev *sd)
     99{
    100	return container_of(sd, struct ad9389b_state, sd);
    101}
    102
    103static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl)
    104{
    105	return &container_of(ctrl->handler, struct ad9389b_state, hdl)->sd;
    106}
    107
    108/* ------------------------ I2C ----------------------------------------------- */
    109
    110static int ad9389b_rd(struct v4l2_subdev *sd, u8 reg)
    111{
    112	struct i2c_client *client = v4l2_get_subdevdata(sd);
    113
    114	return i2c_smbus_read_byte_data(client, reg);
    115}
    116
    117static int ad9389b_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
    118{
    119	struct i2c_client *client = v4l2_get_subdevdata(sd);
    120	int ret;
    121	int i;
    122
    123	for (i = 0; i < 3; i++) {
    124		ret = i2c_smbus_write_byte_data(client, reg, val);
    125		if (ret == 0)
    126			return 0;
    127	}
    128	v4l2_err(sd, "%s: failed reg 0x%x, val 0x%x\n", __func__, reg, val);
    129	return ret;
    130}
    131
    132/* To set specific bits in the register, a clear-mask is given (to be AND-ed),
    133   and then the value-mask (to be OR-ed). */
    134static inline void ad9389b_wr_and_or(struct v4l2_subdev *sd, u8 reg,
    135				     u8 clr_mask, u8 val_mask)
    136{
    137	ad9389b_wr(sd, reg, (ad9389b_rd(sd, reg) & clr_mask) | val_mask);
    138}
    139
    140static void ad9389b_edid_rd(struct v4l2_subdev *sd, u16 len, u8 *buf)
    141{
    142	struct ad9389b_state *state = get_ad9389b_state(sd);
    143	int i;
    144
    145	v4l2_dbg(1, debug, sd, "%s:\n", __func__);
    146
    147	for (i = 0; i < len; i++)
    148		buf[i] = i2c_smbus_read_byte_data(state->edid_i2c_client, i);
    149}
    150
    151static inline bool ad9389b_have_hotplug(struct v4l2_subdev *sd)
    152{
    153	return ad9389b_rd(sd, 0x42) & MASK_AD9389B_HPD_DETECT;
    154}
    155
    156static inline bool ad9389b_have_rx_sense(struct v4l2_subdev *sd)
    157{
    158	return ad9389b_rd(sd, 0x42) & MASK_AD9389B_MSEN_DETECT;
    159}
    160
    161static void ad9389b_csc_conversion_mode(struct v4l2_subdev *sd, u8 mode)
    162{
    163	ad9389b_wr_and_or(sd, 0x17, 0xe7, (mode & 0x3)<<3);
    164	ad9389b_wr_and_or(sd, 0x18, 0x9f, (mode & 0x3)<<5);
    165}
    166
    167static void ad9389b_csc_coeff(struct v4l2_subdev *sd,
    168			      u16 A1, u16 A2, u16 A3, u16 A4,
    169			      u16 B1, u16 B2, u16 B3, u16 B4,
    170			      u16 C1, u16 C2, u16 C3, u16 C4)
    171{
    172	/* A */
    173	ad9389b_wr_and_or(sd, 0x18, 0xe0, A1>>8);
    174	ad9389b_wr(sd, 0x19, A1);
    175	ad9389b_wr_and_or(sd, 0x1A, 0xe0, A2>>8);
    176	ad9389b_wr(sd, 0x1B, A2);
    177	ad9389b_wr_and_or(sd, 0x1c, 0xe0, A3>>8);
    178	ad9389b_wr(sd, 0x1d, A3);
    179	ad9389b_wr_and_or(sd, 0x1e, 0xe0, A4>>8);
    180	ad9389b_wr(sd, 0x1f, A4);
    181
    182	/* B */
    183	ad9389b_wr_and_or(sd, 0x20, 0xe0, B1>>8);
    184	ad9389b_wr(sd, 0x21, B1);
    185	ad9389b_wr_and_or(sd, 0x22, 0xe0, B2>>8);
    186	ad9389b_wr(sd, 0x23, B2);
    187	ad9389b_wr_and_or(sd, 0x24, 0xe0, B3>>8);
    188	ad9389b_wr(sd, 0x25, B3);
    189	ad9389b_wr_and_or(sd, 0x26, 0xe0, B4>>8);
    190	ad9389b_wr(sd, 0x27, B4);
    191
    192	/* C */
    193	ad9389b_wr_and_or(sd, 0x28, 0xe0, C1>>8);
    194	ad9389b_wr(sd, 0x29, C1);
    195	ad9389b_wr_and_or(sd, 0x2A, 0xe0, C2>>8);
    196	ad9389b_wr(sd, 0x2B, C2);
    197	ad9389b_wr_and_or(sd, 0x2C, 0xe0, C3>>8);
    198	ad9389b_wr(sd, 0x2D, C3);
    199	ad9389b_wr_and_or(sd, 0x2E, 0xe0, C4>>8);
    200	ad9389b_wr(sd, 0x2F, C4);
    201}
    202
    203static void ad9389b_csc_rgb_full2limit(struct v4l2_subdev *sd, bool enable)
    204{
    205	if (enable) {
    206		u8 csc_mode = 0;
    207
    208		ad9389b_csc_conversion_mode(sd, csc_mode);
    209		ad9389b_csc_coeff(sd,
    210				  4096-564, 0, 0, 256,
    211				  0, 4096-564, 0, 256,
    212				  0, 0, 4096-564, 256);
    213		/* enable CSC */
    214		ad9389b_wr_and_or(sd, 0x3b, 0xfe, 0x1);
    215		/* AVI infoframe: Limited range RGB (16-235) */
    216		ad9389b_wr_and_or(sd, 0xcd, 0xf9, 0x02);
    217	} else {
    218		/* disable CSC */
    219		ad9389b_wr_and_or(sd, 0x3b, 0xfe, 0x0);
    220		/* AVI infoframe: Full range RGB (0-255) */
    221		ad9389b_wr_and_or(sd, 0xcd, 0xf9, 0x04);
    222	}
    223}
    224
    225static void ad9389b_set_IT_content_AVI_InfoFrame(struct v4l2_subdev *sd)
    226{
    227	struct ad9389b_state *state = get_ad9389b_state(sd);
    228
    229	if (state->dv_timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO) {
    230		/* CE format, not IT  */
    231		ad9389b_wr_and_or(sd, 0xcd, 0xbf, 0x00);
    232	} else {
    233		/* IT format */
    234		ad9389b_wr_and_or(sd, 0xcd, 0xbf, 0x40);
    235	}
    236}
    237
    238static int ad9389b_set_rgb_quantization_mode(struct v4l2_subdev *sd, struct v4l2_ctrl *ctrl)
    239{
    240	struct ad9389b_state *state = get_ad9389b_state(sd);
    241
    242	switch (ctrl->val) {
    243	case V4L2_DV_RGB_RANGE_AUTO:
    244		/* automatic */
    245		if (state->dv_timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO) {
    246			/* CE format, RGB limited range (16-235) */
    247			ad9389b_csc_rgb_full2limit(sd, true);
    248		} else {
    249			/* not CE format, RGB full range (0-255) */
    250			ad9389b_csc_rgb_full2limit(sd, false);
    251		}
    252		break;
    253	case V4L2_DV_RGB_RANGE_LIMITED:
    254		/* RGB limited range (16-235) */
    255		ad9389b_csc_rgb_full2limit(sd, true);
    256		break;
    257	case V4L2_DV_RGB_RANGE_FULL:
    258		/* RGB full range (0-255) */
    259		ad9389b_csc_rgb_full2limit(sd, false);
    260		break;
    261	default:
    262		return -EINVAL;
    263	}
    264	return 0;
    265}
    266
    267static void ad9389b_set_manual_pll_gear(struct v4l2_subdev *sd, u32 pixelclock)
    268{
    269	u8 gear;
    270
    271	/* Workaround for TMDS PLL problem
    272	 * The TMDS PLL in AD9389b change gear when the chip is heated above a
    273	 * certain temperature. The output is disabled when the PLL change gear
    274	 * so the monitor has to lock on the signal again. A workaround for
    275	 * this is to use the manual PLL gears. This is a solution from Analog
    276	 * Devices that is not documented in the datasheets.
    277	 * 0x98 [7] = enable manual gearing. 0x98 [6:4] = gear
    278	 *
    279	 * The pixel frequency ranges are based on readout of the gear the
    280	 * automatic gearing selects for different pixel clocks
    281	 * (read from 0x9e [3:1]).
    282	 */
    283
    284	if (pixelclock > 140000000)
    285		gear = 0xc0; /* 4th gear */
    286	else if (pixelclock > 117000000)
    287		gear = 0xb0; /* 3rd gear */
    288	else if (pixelclock > 87000000)
    289		gear = 0xa0; /* 2nd gear */
    290	else if (pixelclock > 60000000)
    291		gear = 0x90; /* 1st gear */
    292	else
    293		gear = 0x80; /* 0th gear */
    294
    295	ad9389b_wr_and_or(sd, 0x98, 0x0f, gear);
    296}
    297
    298/* ------------------------------ CTRL OPS ------------------------------ */
    299
    300static int ad9389b_s_ctrl(struct v4l2_ctrl *ctrl)
    301{
    302	struct v4l2_subdev *sd = to_sd(ctrl);
    303	struct ad9389b_state *state = get_ad9389b_state(sd);
    304
    305	v4l2_dbg(1, debug, sd,
    306		 "%s: ctrl id: %d, ctrl->val %d\n", __func__, ctrl->id, ctrl->val);
    307
    308	if (state->hdmi_mode_ctrl == ctrl) {
    309		/* Set HDMI or DVI-D */
    310		ad9389b_wr_and_or(sd, 0xaf, 0xfd,
    311				  ctrl->val == V4L2_DV_TX_MODE_HDMI ? 0x02 : 0x00);
    312		return 0;
    313	}
    314	if (state->rgb_quantization_range_ctrl == ctrl)
    315		return ad9389b_set_rgb_quantization_mode(sd, ctrl);
    316	return -EINVAL;
    317}
    318
    319static const struct v4l2_ctrl_ops ad9389b_ctrl_ops = {
    320	.s_ctrl = ad9389b_s_ctrl,
    321};
    322
    323/* ---------------------------- CORE OPS ------------------------------------------- */
    324
    325#ifdef CONFIG_VIDEO_ADV_DEBUG
    326static int ad9389b_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
    327{
    328	reg->val = ad9389b_rd(sd, reg->reg & 0xff);
    329	reg->size = 1;
    330	return 0;
    331}
    332
    333static int ad9389b_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
    334{
    335	ad9389b_wr(sd, reg->reg & 0xff, reg->val & 0xff);
    336	return 0;
    337}
    338#endif
    339
    340static int ad9389b_log_status(struct v4l2_subdev *sd)
    341{
    342	struct ad9389b_state *state = get_ad9389b_state(sd);
    343	struct ad9389b_state_edid *edid = &state->edid;
    344
    345	static const char * const states[] = {
    346		"in reset",
    347		"reading EDID",
    348		"idle",
    349		"initializing HDCP",
    350		"HDCP enabled",
    351		"initializing HDCP repeater",
    352		"6", "7", "8", "9", "A", "B", "C", "D", "E", "F"
    353	};
    354	static const char * const errors[] = {
    355		"no error",
    356		"bad receiver BKSV",
    357		"Ri mismatch",
    358		"Pj mismatch",
    359		"i2c error",
    360		"timed out",
    361		"max repeater cascade exceeded",
    362		"hash check failed",
    363		"too many devices",
    364		"9", "A", "B", "C", "D", "E", "F"
    365	};
    366
    367	u8 manual_gear;
    368
    369	v4l2_info(sd, "chip revision %d\n", state->chip_revision);
    370	v4l2_info(sd, "power %s\n", state->power_on ? "on" : "off");
    371	v4l2_info(sd, "%s hotplug, %s Rx Sense, %s EDID (%d block(s))\n",
    372		  (ad9389b_rd(sd, 0x42) & MASK_AD9389B_HPD_DETECT) ?
    373		  "detected" : "no",
    374		  (ad9389b_rd(sd, 0x42) & MASK_AD9389B_MSEN_DETECT) ?
    375		  "detected" : "no",
    376		  edid->segments ? "found" : "no", edid->blocks);
    377	v4l2_info(sd, "%s output %s\n",
    378		  (ad9389b_rd(sd, 0xaf) & 0x02) ?
    379		  "HDMI" : "DVI-D",
    380		  (ad9389b_rd(sd, 0xa1) & 0x3c) ?
    381		  "disabled" : "enabled");
    382	v4l2_info(sd, "ad9389b: %s\n", (ad9389b_rd(sd, 0xb8) & 0x40) ?
    383		  "encrypted" : "no encryption");
    384	v4l2_info(sd, "state: %s, error: %s, detect count: %u, msk/irq: %02x/%02x\n",
    385		  states[ad9389b_rd(sd, 0xc8) & 0xf],
    386		  errors[ad9389b_rd(sd, 0xc8) >> 4],
    387		  state->edid_detect_counter,
    388		  ad9389b_rd(sd, 0x94), ad9389b_rd(sd, 0x96));
    389	manual_gear = ad9389b_rd(sd, 0x98) & 0x80;
    390	v4l2_info(sd, "ad9389b: RGB quantization: %s range\n",
    391		  ad9389b_rd(sd, 0x3b) & 0x01 ? "limited" : "full");
    392	v4l2_info(sd, "ad9389b: %s gear %d\n",
    393		  manual_gear ? "manual" : "automatic",
    394		  manual_gear ? ((ad9389b_rd(sd, 0x98) & 0x70) >> 4) :
    395		  ((ad9389b_rd(sd, 0x9e) & 0x0e) >> 1));
    396	if (ad9389b_rd(sd, 0xaf) & 0x02) {
    397		/* HDMI only */
    398		u8 manual_cts = ad9389b_rd(sd, 0x0a) & 0x80;
    399		u32 N = (ad9389b_rd(sd, 0x01) & 0xf) << 16 |
    400			ad9389b_rd(sd, 0x02) << 8 |
    401			ad9389b_rd(sd, 0x03);
    402		u8 vic_detect = ad9389b_rd(sd, 0x3e) >> 2;
    403		u8 vic_sent = ad9389b_rd(sd, 0x3d) & 0x3f;
    404		u32 CTS;
    405
    406		if (manual_cts)
    407			CTS = (ad9389b_rd(sd, 0x07) & 0xf) << 16 |
    408			      ad9389b_rd(sd, 0x08) << 8 |
    409			      ad9389b_rd(sd, 0x09);
    410		else
    411			CTS = (ad9389b_rd(sd, 0x04) & 0xf) << 16 |
    412			      ad9389b_rd(sd, 0x05) << 8 |
    413			      ad9389b_rd(sd, 0x06);
    414		N = (ad9389b_rd(sd, 0x01) & 0xf) << 16 |
    415		    ad9389b_rd(sd, 0x02) << 8 |
    416		    ad9389b_rd(sd, 0x03);
    417
    418		v4l2_info(sd, "ad9389b: CTS %s mode: N %d, CTS %d\n",
    419			  manual_cts ? "manual" : "automatic", N, CTS);
    420
    421		v4l2_info(sd, "ad9389b: VIC: detected %d, sent %d\n",
    422			  vic_detect, vic_sent);
    423	}
    424	if (state->dv_timings.type == V4L2_DV_BT_656_1120)
    425		v4l2_print_dv_timings(sd->name, "timings: ",
    426				&state->dv_timings, false);
    427	else
    428		v4l2_info(sd, "no timings set\n");
    429	return 0;
    430}
    431
    432/* Power up/down ad9389b */
    433static int ad9389b_s_power(struct v4l2_subdev *sd, int on)
    434{
    435	struct ad9389b_state *state = get_ad9389b_state(sd);
    436	struct ad9389b_platform_data *pdata = &state->pdata;
    437	const int retries = 20;
    438	int i;
    439
    440	v4l2_dbg(1, debug, sd, "%s: power %s\n", __func__, on ? "on" : "off");
    441
    442	state->power_on = on;
    443
    444	if (!on) {
    445		/* Power down */
    446		ad9389b_wr_and_or(sd, 0x41, 0xbf, 0x40);
    447		return true;
    448	}
    449
    450	/* Power up */
    451	/* The ad9389b does not always come up immediately.
    452	   Retry multiple times. */
    453	for (i = 0; i < retries; i++) {
    454		ad9389b_wr_and_or(sd, 0x41, 0xbf, 0x0);
    455		if ((ad9389b_rd(sd, 0x41) & 0x40) == 0)
    456			break;
    457		ad9389b_wr_and_or(sd, 0x41, 0xbf, 0x40);
    458		msleep(10);
    459	}
    460	if (i == retries) {
    461		v4l2_dbg(1, debug, sd, "failed to powerup the ad9389b\n");
    462		ad9389b_s_power(sd, 0);
    463		return false;
    464	}
    465	if (i > 1)
    466		v4l2_dbg(1, debug, sd,
    467			 "needed %d retries to powerup the ad9389b\n", i);
    468
    469	/* Select chip: AD9389B */
    470	ad9389b_wr_and_or(sd, 0xba, 0xef, 0x10);
    471
    472	/* Reserved registers that must be set according to REF_01 p. 11*/
    473	ad9389b_wr_and_or(sd, 0x98, 0xf0, 0x07);
    474	ad9389b_wr(sd, 0x9c, 0x38);
    475	ad9389b_wr_and_or(sd, 0x9d, 0xfc, 0x01);
    476
    477	/* Differential output drive strength */
    478	if (pdata->diff_data_drive_strength > 0)
    479		ad9389b_wr(sd, 0xa2, pdata->diff_data_drive_strength);
    480	else
    481		ad9389b_wr(sd, 0xa2, 0x87);
    482
    483	if (pdata->diff_clk_drive_strength > 0)
    484		ad9389b_wr(sd, 0xa3, pdata->diff_clk_drive_strength);
    485	else
    486		ad9389b_wr(sd, 0xa3, 0x87);
    487
    488	ad9389b_wr(sd, 0x0a, 0x01);
    489	ad9389b_wr(sd, 0xbb, 0xff);
    490
    491	/* Set number of attempts to read the EDID */
    492	ad9389b_wr(sd, 0xc9, 0xf);
    493	return true;
    494}
    495
    496/* Enable interrupts */
    497static void ad9389b_set_isr(struct v4l2_subdev *sd, bool enable)
    498{
    499	u8 irqs = MASK_AD9389B_HPD_INT | MASK_AD9389B_MSEN_INT;
    500	u8 irqs_rd;
    501	int retries = 100;
    502
    503	/* The datasheet says that the EDID ready interrupt should be
    504	   disabled if there is no hotplug. */
    505	if (!enable)
    506		irqs = 0;
    507	else if (ad9389b_have_hotplug(sd))
    508		irqs |= MASK_AD9389B_EDID_RDY_INT;
    509
    510	/*
    511	 * This i2c write can fail (approx. 1 in 1000 writes). But it
    512	 * is essential that this register is correct, so retry it
    513	 * multiple times.
    514	 *
    515	 * Note that the i2c write does not report an error, but the readback
    516	 * clearly shows the wrong value.
    517	 */
    518	do {
    519		ad9389b_wr(sd, 0x94, irqs);
    520		irqs_rd = ad9389b_rd(sd, 0x94);
    521	} while (retries-- && irqs_rd != irqs);
    522
    523	if (irqs_rd != irqs)
    524		v4l2_err(sd, "Could not set interrupts: hw failure?\n");
    525}
    526
    527/* Interrupt handler */
    528static int ad9389b_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
    529{
    530	u8 irq_status;
    531
    532	/* disable interrupts to prevent a race condition */
    533	ad9389b_set_isr(sd, false);
    534	irq_status = ad9389b_rd(sd, 0x96);
    535	/* clear detected interrupts */
    536	ad9389b_wr(sd, 0x96, irq_status);
    537	/* enable interrupts */
    538	ad9389b_set_isr(sd, true);
    539
    540	v4l2_dbg(1, debug, sd, "%s: irq_status 0x%x\n", __func__, irq_status);
    541
    542	if (irq_status & (MASK_AD9389B_HPD_INT))
    543		ad9389b_check_monitor_present_status(sd);
    544	if (irq_status & MASK_AD9389B_EDID_RDY_INT)
    545		ad9389b_check_edid_status(sd);
    546
    547	*handled = true;
    548	return 0;
    549}
    550
    551static const struct v4l2_subdev_core_ops ad9389b_core_ops = {
    552	.log_status = ad9389b_log_status,
    553#ifdef CONFIG_VIDEO_ADV_DEBUG
    554	.g_register = ad9389b_g_register,
    555	.s_register = ad9389b_s_register,
    556#endif
    557	.s_power = ad9389b_s_power,
    558	.interrupt_service_routine = ad9389b_isr,
    559};
    560
    561/* ------------------------------ VIDEO OPS ------------------------------ */
    562
    563/* Enable/disable ad9389b output */
    564static int ad9389b_s_stream(struct v4l2_subdev *sd, int enable)
    565{
    566	v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
    567
    568	ad9389b_wr_and_or(sd, 0xa1, ~0x3c, (enable ? 0 : 0x3c));
    569	if (enable) {
    570		ad9389b_check_monitor_present_status(sd);
    571	} else {
    572		ad9389b_s_power(sd, 0);
    573	}
    574	return 0;
    575}
    576
    577static const struct v4l2_dv_timings_cap ad9389b_timings_cap = {
    578	.type = V4L2_DV_BT_656_1120,
    579	/* keep this initialization for compatibility with GCC < 4.4.6 */
    580	.reserved = { 0 },
    581	V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000,
    582		V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
    583			V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
    584		V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
    585		V4L2_DV_BT_CAP_CUSTOM)
    586};
    587
    588static int ad9389b_s_dv_timings(struct v4l2_subdev *sd,
    589				struct v4l2_dv_timings *timings)
    590{
    591	struct ad9389b_state *state = get_ad9389b_state(sd);
    592
    593	v4l2_dbg(1, debug, sd, "%s:\n", __func__);
    594
    595	/* quick sanity check */
    596	if (!v4l2_valid_dv_timings(timings, &ad9389b_timings_cap, NULL, NULL))
    597		return -EINVAL;
    598
    599	/* Fill the optional fields .standards and .flags in struct v4l2_dv_timings
    600	   if the format is one of the CEA or DMT timings. */
    601	v4l2_find_dv_timings_cap(timings, &ad9389b_timings_cap, 0, NULL, NULL);
    602
    603	timings->bt.flags &= ~V4L2_DV_FL_REDUCED_FPS;
    604
    605	/* save timings */
    606	state->dv_timings = *timings;
    607
    608	/* update quantization range based on new dv_timings */
    609	ad9389b_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
    610
    611	/* update PLL gear based on new dv_timings */
    612	if (state->pdata.tmds_pll_gear == AD9389B_TMDS_PLL_GEAR_SEMI_AUTOMATIC)
    613		ad9389b_set_manual_pll_gear(sd, (u32)timings->bt.pixelclock);
    614
    615	/* update AVI infoframe */
    616	ad9389b_set_IT_content_AVI_InfoFrame(sd);
    617
    618	return 0;
    619}
    620
    621static int ad9389b_g_dv_timings(struct v4l2_subdev *sd,
    622				struct v4l2_dv_timings *timings)
    623{
    624	struct ad9389b_state *state = get_ad9389b_state(sd);
    625
    626	v4l2_dbg(1, debug, sd, "%s:\n", __func__);
    627
    628	if (!timings)
    629		return -EINVAL;
    630
    631	*timings = state->dv_timings;
    632
    633	return 0;
    634}
    635
    636static int ad9389b_enum_dv_timings(struct v4l2_subdev *sd,
    637				   struct v4l2_enum_dv_timings *timings)
    638{
    639	if (timings->pad != 0)
    640		return -EINVAL;
    641
    642	return v4l2_enum_dv_timings_cap(timings, &ad9389b_timings_cap,
    643			NULL, NULL);
    644}
    645
    646static int ad9389b_dv_timings_cap(struct v4l2_subdev *sd,
    647				  struct v4l2_dv_timings_cap *cap)
    648{
    649	if (cap->pad != 0)
    650		return -EINVAL;
    651
    652	*cap = ad9389b_timings_cap;
    653	return 0;
    654}
    655
    656static const struct v4l2_subdev_video_ops ad9389b_video_ops = {
    657	.s_stream = ad9389b_s_stream,
    658	.s_dv_timings = ad9389b_s_dv_timings,
    659	.g_dv_timings = ad9389b_g_dv_timings,
    660};
    661
    662/* ------------------------------ PAD OPS ------------------------------ */
    663
    664static int ad9389b_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
    665{
    666	struct ad9389b_state *state = get_ad9389b_state(sd);
    667
    668	if (edid->pad != 0)
    669		return -EINVAL;
    670	if (edid->blocks == 0 || edid->blocks > 256)
    671		return -EINVAL;
    672	if (!state->edid.segments) {
    673		v4l2_dbg(1, debug, sd, "EDID segment 0 not found\n");
    674		return -ENODATA;
    675	}
    676	if (edid->start_block >= state->edid.segments * 2)
    677		return -E2BIG;
    678	if (edid->blocks + edid->start_block >= state->edid.segments * 2)
    679		edid->blocks = state->edid.segments * 2 - edid->start_block;
    680	memcpy(edid->edid, &state->edid.data[edid->start_block * 128],
    681	       128 * edid->blocks);
    682	return 0;
    683}
    684
    685static const struct v4l2_subdev_pad_ops ad9389b_pad_ops = {
    686	.get_edid = ad9389b_get_edid,
    687	.enum_dv_timings = ad9389b_enum_dv_timings,
    688	.dv_timings_cap = ad9389b_dv_timings_cap,
    689};
    690
    691/* ------------------------------ AUDIO OPS ------------------------------ */
    692
    693static int ad9389b_s_audio_stream(struct v4l2_subdev *sd, int enable)
    694{
    695	v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
    696
    697	if (enable)
    698		ad9389b_wr_and_or(sd, 0x45, 0x3f, 0x80);
    699	else
    700		ad9389b_wr_and_or(sd, 0x45, 0x3f, 0x40);
    701
    702	return 0;
    703}
    704
    705static int ad9389b_s_clock_freq(struct v4l2_subdev *sd, u32 freq)
    706{
    707	u32 N;
    708
    709	switch (freq) {
    710	case 32000:  N = 4096;  break;
    711	case 44100:  N = 6272;  break;
    712	case 48000:  N = 6144;  break;
    713	case 88200:  N = 12544; break;
    714	case 96000:  N = 12288; break;
    715	case 176400: N = 25088; break;
    716	case 192000: N = 24576; break;
    717	default:
    718	     return -EINVAL;
    719	}
    720
    721	/* Set N (used with CTS to regenerate the audio clock) */
    722	ad9389b_wr(sd, 0x01, (N >> 16) & 0xf);
    723	ad9389b_wr(sd, 0x02, (N >> 8) & 0xff);
    724	ad9389b_wr(sd, 0x03, N & 0xff);
    725
    726	return 0;
    727}
    728
    729static int ad9389b_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq)
    730{
    731	u32 i2s_sf;
    732
    733	switch (freq) {
    734	case 32000:  i2s_sf = 0x30; break;
    735	case 44100:  i2s_sf = 0x00; break;
    736	case 48000:  i2s_sf = 0x20; break;
    737	case 88200:  i2s_sf = 0x80; break;
    738	case 96000:  i2s_sf = 0xa0; break;
    739	case 176400: i2s_sf = 0xc0; break;
    740	case 192000: i2s_sf = 0xe0; break;
    741	default:
    742	     return -EINVAL;
    743	}
    744
    745	/* Set sampling frequency for I2S audio to 48 kHz */
    746	ad9389b_wr_and_or(sd, 0x15, 0xf, i2s_sf);
    747
    748	return 0;
    749}
    750
    751static int ad9389b_s_routing(struct v4l2_subdev *sd, u32 input, u32 output, u32 config)
    752{
    753	/* TODO based on input/output/config */
    754	/* TODO See datasheet "Programmers guide" p. 39-40 */
    755
    756	/* Only 2 channels in use for application */
    757	ad9389b_wr_and_or(sd, 0x50, 0x1f, 0x20);
    758	/* Speaker mapping */
    759	ad9389b_wr(sd, 0x51, 0x00);
    760
    761	/* TODO Where should this be placed? */
    762	/* 16 bit audio word length */
    763	ad9389b_wr_and_or(sd, 0x14, 0xf0, 0x02);
    764
    765	return 0;
    766}
    767
    768static const struct v4l2_subdev_audio_ops ad9389b_audio_ops = {
    769	.s_stream = ad9389b_s_audio_stream,
    770	.s_clock_freq = ad9389b_s_clock_freq,
    771	.s_i2s_clock_freq = ad9389b_s_i2s_clock_freq,
    772	.s_routing = ad9389b_s_routing,
    773};
    774
    775/* --------------------- SUBDEV OPS --------------------------------------- */
    776
    777static const struct v4l2_subdev_ops ad9389b_ops = {
    778	.core  = &ad9389b_core_ops,
    779	.video = &ad9389b_video_ops,
    780	.audio = &ad9389b_audio_ops,
    781	.pad = &ad9389b_pad_ops,
    782};
    783
    784/* ----------------------------------------------------------------------- */
    785static void ad9389b_dbg_dump_edid(int lvl, int debug, struct v4l2_subdev *sd,
    786				  int segment, u8 *buf)
    787{
    788	int i, j;
    789
    790	if (debug < lvl)
    791		return;
    792
    793	v4l2_dbg(lvl, debug, sd, "edid segment %d\n", segment);
    794	for (i = 0; i < 256; i += 16) {
    795		u8 b[128];
    796		u8 *bp = b;
    797
    798		if (i == 128)
    799			v4l2_dbg(lvl, debug, sd, "\n");
    800		for (j = i; j < i + 16; j++) {
    801			sprintf(bp, "0x%02x, ", buf[j]);
    802			bp += 6;
    803		}
    804		bp[0] = '\0';
    805		v4l2_dbg(lvl, debug, sd, "%s\n", b);
    806	}
    807}
    808
    809static void ad9389b_edid_handler(struct work_struct *work)
    810{
    811	struct delayed_work *dwork = to_delayed_work(work);
    812	struct ad9389b_state *state =
    813		container_of(dwork, struct ad9389b_state, edid_handler);
    814	struct v4l2_subdev *sd = &state->sd;
    815	struct ad9389b_edid_detect ed;
    816
    817	v4l2_dbg(1, debug, sd, "%s:\n", __func__);
    818
    819	if (ad9389b_check_edid_status(sd)) {
    820		/* Return if we received the EDID. */
    821		return;
    822	}
    823
    824	if (ad9389b_have_hotplug(sd)) {
    825		/* We must retry reading the EDID several times, it is possible
    826		 * that initially the EDID couldn't be read due to i2c errors
    827		 * (DVI connectors are particularly prone to this problem). */
    828		if (state->edid.read_retries) {
    829			state->edid.read_retries--;
    830			v4l2_dbg(1, debug, sd, "%s: edid read failed\n", __func__);
    831			ad9389b_s_power(sd, false);
    832			ad9389b_s_power(sd, true);
    833			schedule_delayed_work(&state->edid_handler, EDID_DELAY);
    834			return;
    835		}
    836	}
    837
    838	/* We failed to read the EDID, so send an event for this. */
    839	ed.present = false;
    840	ed.segment = ad9389b_rd(sd, 0xc4);
    841	v4l2_subdev_notify(sd, AD9389B_EDID_DETECT, (void *)&ed);
    842	v4l2_dbg(1, debug, sd, "%s: no edid found\n", __func__);
    843}
    844
    845static void ad9389b_audio_setup(struct v4l2_subdev *sd)
    846{
    847	v4l2_dbg(1, debug, sd, "%s\n", __func__);
    848
    849	ad9389b_s_i2s_clock_freq(sd, 48000);
    850	ad9389b_s_clock_freq(sd, 48000);
    851	ad9389b_s_routing(sd, 0, 0, 0);
    852}
    853
    854/* Initial setup of AD9389b */
    855
    856/* Configure hdmi transmitter. */
    857static void ad9389b_setup(struct v4l2_subdev *sd)
    858{
    859	struct ad9389b_state *state = get_ad9389b_state(sd);
    860
    861	v4l2_dbg(1, debug, sd, "%s\n", __func__);
    862
    863	/* Input format: RGB 4:4:4 */
    864	ad9389b_wr_and_or(sd, 0x15, 0xf1, 0x0);
    865	/* Output format: RGB 4:4:4 */
    866	ad9389b_wr_and_or(sd, 0x16, 0x3f, 0x0);
    867	/* 1st order interpolation 4:2:2 -> 4:4:4 up conversion,
    868	   Aspect ratio: 16:9 */
    869	ad9389b_wr_and_or(sd, 0x17, 0xf9, 0x06);
    870	/* Output format: RGB 4:4:4, Active Format Information is valid. */
    871	ad9389b_wr_and_or(sd, 0x45, 0xc7, 0x08);
    872	/* Underscanned */
    873	ad9389b_wr_and_or(sd, 0x46, 0x3f, 0x80);
    874	/* Setup video format */
    875	ad9389b_wr(sd, 0x3c, 0x0);
    876	/* Active format aspect ratio: same as picure. */
    877	ad9389b_wr(sd, 0x47, 0x80);
    878	/* No encryption */
    879	ad9389b_wr_and_or(sd, 0xaf, 0xef, 0x0);
    880	/* Positive clk edge capture for input video clock */
    881	ad9389b_wr_and_or(sd, 0xba, 0x1f, 0x60);
    882
    883	ad9389b_audio_setup(sd);
    884
    885	v4l2_ctrl_handler_setup(&state->hdl);
    886
    887	ad9389b_set_IT_content_AVI_InfoFrame(sd);
    888}
    889
    890static void ad9389b_notify_monitor_detect(struct v4l2_subdev *sd)
    891{
    892	struct ad9389b_monitor_detect mdt;
    893	struct ad9389b_state *state = get_ad9389b_state(sd);
    894
    895	mdt.present = state->have_monitor;
    896	v4l2_subdev_notify(sd, AD9389B_MONITOR_DETECT, (void *)&mdt);
    897}
    898
    899static void ad9389b_update_monitor_present_status(struct v4l2_subdev *sd)
    900{
    901	struct ad9389b_state *state = get_ad9389b_state(sd);
    902	/* read hotplug and rx-sense state */
    903	u8 status = ad9389b_rd(sd, 0x42);
    904
    905	v4l2_dbg(1, debug, sd, "%s: status: 0x%x%s%s\n",
    906		 __func__,
    907		 status,
    908		 status & MASK_AD9389B_HPD_DETECT ? ", hotplug" : "",
    909		 status & MASK_AD9389B_MSEN_DETECT ? ", rx-sense" : "");
    910
    911	if (status & MASK_AD9389B_HPD_DETECT) {
    912		v4l2_dbg(1, debug, sd, "%s: hotplug detected\n", __func__);
    913		state->have_monitor = true;
    914		if (!ad9389b_s_power(sd, true)) {
    915			v4l2_dbg(1, debug, sd,
    916				 "%s: monitor detected, powerup failed\n", __func__);
    917			return;
    918		}
    919		ad9389b_setup(sd);
    920		ad9389b_notify_monitor_detect(sd);
    921		state->edid.read_retries = EDID_MAX_RETRIES;
    922		schedule_delayed_work(&state->edid_handler, EDID_DELAY);
    923	} else if (!(status & MASK_AD9389B_HPD_DETECT)) {
    924		v4l2_dbg(1, debug, sd, "%s: hotplug not detected\n", __func__);
    925		state->have_monitor = false;
    926		ad9389b_notify_monitor_detect(sd);
    927		ad9389b_s_power(sd, false);
    928		memset(&state->edid, 0, sizeof(struct ad9389b_state_edid));
    929	}
    930
    931	/* update read only ctrls */
    932	v4l2_ctrl_s_ctrl(state->hotplug_ctrl, ad9389b_have_hotplug(sd) ? 0x1 : 0x0);
    933	v4l2_ctrl_s_ctrl(state->rx_sense_ctrl, ad9389b_have_rx_sense(sd) ? 0x1 : 0x0);
    934	v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, state->edid.segments ? 0x1 : 0x0);
    935
    936	/* update with setting from ctrls */
    937	ad9389b_s_ctrl(state->rgb_quantization_range_ctrl);
    938	ad9389b_s_ctrl(state->hdmi_mode_ctrl);
    939}
    940
    941static void ad9389b_check_monitor_present_status(struct v4l2_subdev *sd)
    942{
    943	struct ad9389b_state *state = get_ad9389b_state(sd);
    944	int retry = 0;
    945
    946	ad9389b_update_monitor_present_status(sd);
    947
    948	/*
    949	 * Rapid toggling of the hotplug may leave the chip powered off,
    950	 * even if we think it is on. In that case reset and power up again.
    951	 */
    952	while (state->power_on && (ad9389b_rd(sd, 0x41) & 0x40)) {
    953		if (++retry > 5) {
    954			v4l2_err(sd, "retried %d times, give up\n", retry);
    955			return;
    956		}
    957		v4l2_dbg(1, debug, sd, "%s: reset and re-check status (%d)\n", __func__, retry);
    958		ad9389b_notify_monitor_detect(sd);
    959		cancel_delayed_work_sync(&state->edid_handler);
    960		memset(&state->edid, 0, sizeof(struct ad9389b_state_edid));
    961		ad9389b_s_power(sd, false);
    962		ad9389b_update_monitor_present_status(sd);
    963	}
    964}
    965
    966static bool edid_block_verify_crc(u8 *edid_block)
    967{
    968	u8 sum = 0;
    969	int i;
    970
    971	for (i = 0; i < 128; i++)
    972		sum += edid_block[i];
    973	return sum == 0;
    974}
    975
    976static bool edid_verify_crc(struct v4l2_subdev *sd, u32 segment)
    977{
    978	struct ad9389b_state *state = get_ad9389b_state(sd);
    979	u32 blocks = state->edid.blocks;
    980	u8 *data = state->edid.data;
    981
    982	if (edid_block_verify_crc(&data[segment * 256])) {
    983		if ((segment + 1) * 2 <= blocks)
    984			return edid_block_verify_crc(&data[segment * 256 + 128]);
    985		return true;
    986	}
    987	return false;
    988}
    989
    990static bool edid_verify_header(struct v4l2_subdev *sd, u32 segment)
    991{
    992	static const u8 hdmi_header[] = {
    993		0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
    994	};
    995	struct ad9389b_state *state = get_ad9389b_state(sd);
    996	u8 *data = state->edid.data;
    997	int i;
    998
    999	if (segment)
   1000		return true;
   1001
   1002	for (i = 0; i < ARRAY_SIZE(hdmi_header); i++)
   1003		if (data[i] != hdmi_header[i])
   1004			return false;
   1005
   1006	return true;
   1007}
   1008
   1009static bool ad9389b_check_edid_status(struct v4l2_subdev *sd)
   1010{
   1011	struct ad9389b_state *state = get_ad9389b_state(sd);
   1012	struct ad9389b_edid_detect ed;
   1013	int segment;
   1014	u8 edidRdy = ad9389b_rd(sd, 0xc5);
   1015
   1016	v4l2_dbg(1, debug, sd, "%s: edid ready (retries: %d)\n",
   1017		 __func__, EDID_MAX_RETRIES - state->edid.read_retries);
   1018
   1019	if (!(edidRdy & MASK_AD9389B_EDID_RDY))
   1020		return false;
   1021
   1022	segment = ad9389b_rd(sd, 0xc4);
   1023	if (segment >= EDID_MAX_SEGM) {
   1024		v4l2_err(sd, "edid segment number too big\n");
   1025		return false;
   1026	}
   1027	v4l2_dbg(1, debug, sd, "%s: got segment %d\n", __func__, segment);
   1028	ad9389b_edid_rd(sd, 256, &state->edid.data[segment * 256]);
   1029	ad9389b_dbg_dump_edid(2, debug, sd, segment,
   1030			      &state->edid.data[segment * 256]);
   1031	if (segment == 0) {
   1032		state->edid.blocks = state->edid.data[0x7e] + 1;
   1033		v4l2_dbg(1, debug, sd, "%s: %d blocks in total\n",
   1034			 __func__, state->edid.blocks);
   1035	}
   1036	if (!edid_verify_crc(sd, segment) ||
   1037	    !edid_verify_header(sd, segment)) {
   1038		/* edid crc error, force reread of edid segment */
   1039		v4l2_err(sd, "%s: edid crc or header error\n", __func__);
   1040		ad9389b_s_power(sd, false);
   1041		ad9389b_s_power(sd, true);
   1042		return false;
   1043	}
   1044	/* one more segment read ok */
   1045	state->edid.segments = segment + 1;
   1046	if (((state->edid.data[0x7e] >> 1) + 1) > state->edid.segments) {
   1047		/* Request next EDID segment */
   1048		v4l2_dbg(1, debug, sd, "%s: request segment %d\n",
   1049			 __func__, state->edid.segments);
   1050		ad9389b_wr(sd, 0xc9, 0xf);
   1051		ad9389b_wr(sd, 0xc4, state->edid.segments);
   1052		state->edid.read_retries = EDID_MAX_RETRIES;
   1053		schedule_delayed_work(&state->edid_handler, EDID_DELAY);
   1054		return false;
   1055	}
   1056
   1057	/* report when we have all segments but report only for segment 0 */
   1058	ed.present = true;
   1059	ed.segment = 0;
   1060	v4l2_subdev_notify(sd, AD9389B_EDID_DETECT, (void *)&ed);
   1061	state->edid_detect_counter++;
   1062	v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, state->edid.segments ? 0x1 : 0x0);
   1063	return ed.present;
   1064}
   1065
   1066/* ----------------------------------------------------------------------- */
   1067
   1068static void ad9389b_init_setup(struct v4l2_subdev *sd)
   1069{
   1070	struct ad9389b_state *state = get_ad9389b_state(sd);
   1071	struct ad9389b_state_edid *edid = &state->edid;
   1072
   1073	v4l2_dbg(1, debug, sd, "%s\n", __func__);
   1074
   1075	/* clear all interrupts */
   1076	ad9389b_wr(sd, 0x96, 0xff);
   1077
   1078	memset(edid, 0, sizeof(struct ad9389b_state_edid));
   1079	state->have_monitor = false;
   1080	ad9389b_set_isr(sd, false);
   1081}
   1082
   1083static int ad9389b_probe(struct i2c_client *client, const struct i2c_device_id *id)
   1084{
   1085	const struct v4l2_dv_timings dv1080p60 = V4L2_DV_BT_CEA_1920X1080P60;
   1086	struct ad9389b_state *state;
   1087	struct ad9389b_platform_data *pdata = client->dev.platform_data;
   1088	struct v4l2_ctrl_handler *hdl;
   1089	struct v4l2_subdev *sd;
   1090	int err = -EIO;
   1091
   1092	/* Check if the adapter supports the needed features */
   1093	if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
   1094		return -EIO;
   1095
   1096	v4l_dbg(1, debug, client, "detecting ad9389b client on address 0x%x\n",
   1097		client->addr << 1);
   1098
   1099	state = devm_kzalloc(&client->dev, sizeof(*state), GFP_KERNEL);
   1100	if (!state)
   1101		return -ENOMEM;
   1102
   1103	/* Platform data */
   1104	if (pdata == NULL) {
   1105		v4l_err(client, "No platform data!\n");
   1106		return -ENODEV;
   1107	}
   1108	memcpy(&state->pdata, pdata, sizeof(state->pdata));
   1109
   1110	sd = &state->sd;
   1111	v4l2_i2c_subdev_init(sd, client, &ad9389b_ops);
   1112	sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
   1113
   1114	hdl = &state->hdl;
   1115	v4l2_ctrl_handler_init(hdl, 5);
   1116
   1117	state->hdmi_mode_ctrl = v4l2_ctrl_new_std_menu(hdl, &ad9389b_ctrl_ops,
   1118			V4L2_CID_DV_TX_MODE, V4L2_DV_TX_MODE_HDMI,
   1119			0, V4L2_DV_TX_MODE_DVI_D);
   1120	state->hotplug_ctrl = v4l2_ctrl_new_std(hdl, NULL,
   1121			V4L2_CID_DV_TX_HOTPLUG, 0, 1, 0, 0);
   1122	state->rx_sense_ctrl = v4l2_ctrl_new_std(hdl, NULL,
   1123			V4L2_CID_DV_TX_RXSENSE, 0, 1, 0, 0);
   1124	state->have_edid0_ctrl = v4l2_ctrl_new_std(hdl, NULL,
   1125			V4L2_CID_DV_TX_EDID_PRESENT, 0, 1, 0, 0);
   1126	state->rgb_quantization_range_ctrl =
   1127		v4l2_ctrl_new_std_menu(hdl, &ad9389b_ctrl_ops,
   1128			V4L2_CID_DV_TX_RGB_RANGE, V4L2_DV_RGB_RANGE_FULL,
   1129			0, V4L2_DV_RGB_RANGE_AUTO);
   1130	sd->ctrl_handler = hdl;
   1131	if (hdl->error) {
   1132		err = hdl->error;
   1133
   1134		goto err_hdl;
   1135	}
   1136	state->pad.flags = MEDIA_PAD_FL_SINK;
   1137	sd->entity.function = MEDIA_ENT_F_DV_ENCODER;
   1138	err = media_entity_pads_init(&sd->entity, 1, &state->pad);
   1139	if (err)
   1140		goto err_hdl;
   1141
   1142	state->chip_revision = ad9389b_rd(sd, 0x0);
   1143	if (state->chip_revision != 2) {
   1144		v4l2_err(sd, "chip_revision %d != 2\n", state->chip_revision);
   1145		err = -EIO;
   1146		goto err_entity;
   1147	}
   1148	v4l2_dbg(1, debug, sd, "reg 0x41 0x%x, chip version (reg 0x00) 0x%x\n",
   1149		 ad9389b_rd(sd, 0x41), state->chip_revision);
   1150
   1151	state->edid_i2c_client = i2c_new_dummy_device(client->adapter, (0x7e >> 1));
   1152	if (IS_ERR(state->edid_i2c_client)) {
   1153		v4l2_err(sd, "failed to register edid i2c client\n");
   1154		err = PTR_ERR(state->edid_i2c_client);
   1155		goto err_entity;
   1156	}
   1157
   1158	INIT_DELAYED_WORK(&state->edid_handler, ad9389b_edid_handler);
   1159	state->dv_timings = dv1080p60;
   1160
   1161	ad9389b_init_setup(sd);
   1162	ad9389b_set_isr(sd, true);
   1163
   1164	v4l2_info(sd, "%s found @ 0x%x (%s)\n", client->name,
   1165		  client->addr << 1, client->adapter->name);
   1166	return 0;
   1167
   1168err_entity:
   1169	media_entity_cleanup(&sd->entity);
   1170err_hdl:
   1171	v4l2_ctrl_handler_free(&state->hdl);
   1172	return err;
   1173}
   1174
   1175/* ----------------------------------------------------------------------- */
   1176
   1177static int ad9389b_remove(struct i2c_client *client)
   1178{
   1179	struct v4l2_subdev *sd = i2c_get_clientdata(client);
   1180	struct ad9389b_state *state = get_ad9389b_state(sd);
   1181
   1182	state->chip_revision = -1;
   1183
   1184	v4l2_dbg(1, debug, sd, "%s removed @ 0x%x (%s)\n", client->name,
   1185		 client->addr << 1, client->adapter->name);
   1186
   1187	ad9389b_s_stream(sd, false);
   1188	ad9389b_s_audio_stream(sd, false);
   1189	ad9389b_init_setup(sd);
   1190	cancel_delayed_work_sync(&state->edid_handler);
   1191	i2c_unregister_device(state->edid_i2c_client);
   1192	v4l2_device_unregister_subdev(sd);
   1193	media_entity_cleanup(&sd->entity);
   1194	v4l2_ctrl_handler_free(sd->ctrl_handler);
   1195	return 0;
   1196}
   1197
   1198/* ----------------------------------------------------------------------- */
   1199
   1200static const struct i2c_device_id ad9389b_id[] = {
   1201	{ "ad9389b", 0 },
   1202	{ "ad9889b", 0 },
   1203	{ }
   1204};
   1205MODULE_DEVICE_TABLE(i2c, ad9389b_id);
   1206
   1207static struct i2c_driver ad9389b_driver = {
   1208	.driver = {
   1209		.name = "ad9389b",
   1210	},
   1211	.probe = ad9389b_probe,
   1212	.remove = ad9389b_remove,
   1213	.id_table = ad9389b_id,
   1214};
   1215
   1216module_i2c_driver(ad9389b_driver);