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

ti-sn65dsi86.c (54877B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
      4 * datasheet: https://www.ti.com/lit/ds/symlink/sn65dsi86.pdf
      5 */
      6
      7#include <linux/atomic.h>
      8#include <linux/auxiliary_bus.h>
      9#include <linux/bitfield.h>
     10#include <linux/bits.h>
     11#include <linux/clk.h>
     12#include <linux/debugfs.h>
     13#include <linux/gpio/consumer.h>
     14#include <linux/gpio/driver.h>
     15#include <linux/i2c.h>
     16#include <linux/iopoll.h>
     17#include <linux/module.h>
     18#include <linux/of_graph.h>
     19#include <linux/pm_runtime.h>
     20#include <linux/pwm.h>
     21#include <linux/regmap.h>
     22#include <linux/regulator/consumer.h>
     23
     24#include <asm/unaligned.h>
     25
     26#include <drm/display/drm_dp_aux_bus.h>
     27#include <drm/display/drm_dp_helper.h>
     28#include <drm/drm_atomic.h>
     29#include <drm/drm_atomic_helper.h>
     30#include <drm/drm_bridge.h>
     31#include <drm/drm_bridge_connector.h>
     32#include <drm/drm_mipi_dsi.h>
     33#include <drm/drm_of.h>
     34#include <drm/drm_panel.h>
     35#include <drm/drm_print.h>
     36#include <drm/drm_probe_helper.h>
     37
     38#define SN_DEVICE_REV_REG			0x08
     39#define SN_DPPLL_SRC_REG			0x0A
     40#define  DPPLL_CLK_SRC_DSICLK			BIT(0)
     41#define  REFCLK_FREQ_MASK			GENMASK(3, 1)
     42#define  REFCLK_FREQ(x)				((x) << 1)
     43#define  DPPLL_SRC_DP_PLL_LOCK			BIT(7)
     44#define SN_PLL_ENABLE_REG			0x0D
     45#define SN_DSI_LANES_REG			0x10
     46#define  CHA_DSI_LANES_MASK			GENMASK(4, 3)
     47#define  CHA_DSI_LANES(x)			((x) << 3)
     48#define SN_DSIA_CLK_FREQ_REG			0x12
     49#define SN_CHA_ACTIVE_LINE_LENGTH_LOW_REG	0x20
     50#define SN_CHA_VERTICAL_DISPLAY_SIZE_LOW_REG	0x24
     51#define SN_CHA_HSYNC_PULSE_WIDTH_LOW_REG	0x2C
     52#define SN_CHA_HSYNC_PULSE_WIDTH_HIGH_REG	0x2D
     53#define  CHA_HSYNC_POLARITY			BIT(7)
     54#define SN_CHA_VSYNC_PULSE_WIDTH_LOW_REG	0x30
     55#define SN_CHA_VSYNC_PULSE_WIDTH_HIGH_REG	0x31
     56#define  CHA_VSYNC_POLARITY			BIT(7)
     57#define SN_CHA_HORIZONTAL_BACK_PORCH_REG	0x34
     58#define SN_CHA_VERTICAL_BACK_PORCH_REG		0x36
     59#define SN_CHA_HORIZONTAL_FRONT_PORCH_REG	0x38
     60#define SN_CHA_VERTICAL_FRONT_PORCH_REG		0x3A
     61#define SN_LN_ASSIGN_REG			0x59
     62#define  LN_ASSIGN_WIDTH			2
     63#define SN_ENH_FRAME_REG			0x5A
     64#define  VSTREAM_ENABLE				BIT(3)
     65#define  LN_POLRS_OFFSET			4
     66#define  LN_POLRS_MASK				0xf0
     67#define SN_DATA_FORMAT_REG			0x5B
     68#define  BPP_18_RGB				BIT(0)
     69#define SN_HPD_DISABLE_REG			0x5C
     70#define  HPD_DISABLE				BIT(0)
     71#define SN_GPIO_IO_REG				0x5E
     72#define  SN_GPIO_INPUT_SHIFT			4
     73#define  SN_GPIO_OUTPUT_SHIFT			0
     74#define SN_GPIO_CTRL_REG			0x5F
     75#define  SN_GPIO_MUX_INPUT			0
     76#define  SN_GPIO_MUX_OUTPUT			1
     77#define  SN_GPIO_MUX_SPECIAL			2
     78#define  SN_GPIO_MUX_MASK			0x3
     79#define SN_AUX_WDATA_REG(x)			(0x64 + (x))
     80#define SN_AUX_ADDR_19_16_REG			0x74
     81#define SN_AUX_ADDR_15_8_REG			0x75
     82#define SN_AUX_ADDR_7_0_REG			0x76
     83#define SN_AUX_ADDR_MASK			GENMASK(19, 0)
     84#define SN_AUX_LENGTH_REG			0x77
     85#define SN_AUX_CMD_REG				0x78
     86#define  AUX_CMD_SEND				BIT(0)
     87#define  AUX_CMD_REQ(x)				((x) << 4)
     88#define SN_AUX_RDATA_REG(x)			(0x79 + (x))
     89#define SN_SSC_CONFIG_REG			0x93
     90#define  DP_NUM_LANES_MASK			GENMASK(5, 4)
     91#define  DP_NUM_LANES(x)			((x) << 4)
     92#define SN_DATARATE_CONFIG_REG			0x94
     93#define  DP_DATARATE_MASK			GENMASK(7, 5)
     94#define  DP_DATARATE(x)				((x) << 5)
     95#define SN_ML_TX_MODE_REG			0x96
     96#define  ML_TX_MAIN_LINK_OFF			0
     97#define  ML_TX_NORMAL_MODE			BIT(0)
     98#define SN_PWM_PRE_DIV_REG			0xA0
     99#define SN_BACKLIGHT_SCALE_REG			0xA1
    100#define  BACKLIGHT_SCALE_MAX			0xFFFF
    101#define SN_BACKLIGHT_REG			0xA3
    102#define SN_PWM_EN_INV_REG			0xA5
    103#define  SN_PWM_INV_MASK			BIT(0)
    104#define  SN_PWM_EN_MASK				BIT(1)
    105#define SN_AUX_CMD_STATUS_REG			0xF4
    106#define  AUX_IRQ_STATUS_AUX_RPLY_TOUT		BIT(3)
    107#define  AUX_IRQ_STATUS_AUX_SHORT		BIT(5)
    108#define  AUX_IRQ_STATUS_NAT_I2C_FAIL		BIT(6)
    109
    110#define MIN_DSI_CLK_FREQ_MHZ	40
    111
    112/* fudge factor required to account for 8b/10b encoding */
    113#define DP_CLK_FUDGE_NUM	10
    114#define DP_CLK_FUDGE_DEN	8
    115
    116/* Matches DP_AUX_MAX_PAYLOAD_BYTES (for now) */
    117#define SN_AUX_MAX_PAYLOAD_BYTES	16
    118
    119#define SN_REGULATOR_SUPPLY_NUM		4
    120
    121#define SN_MAX_DP_LANES			4
    122#define SN_NUM_GPIOS			4
    123#define SN_GPIO_PHYSICAL_OFFSET		1
    124
    125#define SN_LINK_TRAINING_TRIES		10
    126
    127#define SN_PWM_GPIO_IDX			3 /* 4th GPIO */
    128
    129/**
    130 * struct ti_sn65dsi86 - Platform data for ti-sn65dsi86 driver.
    131 * @bridge_aux:   AUX-bus sub device for MIPI-to-eDP bridge functionality.
    132 * @gpio_aux:     AUX-bus sub device for GPIO controller functionality.
    133 * @aux_aux:      AUX-bus sub device for eDP AUX channel functionality.
    134 * @pwm_aux:      AUX-bus sub device for PWM controller functionality.
    135 *
    136 * @dev:          Pointer to the top level (i2c) device.
    137 * @regmap:       Regmap for accessing i2c.
    138 * @aux:          Our aux channel.
    139 * @bridge:       Our bridge.
    140 * @connector:    Our connector.
    141 * @host_node:    Remote DSI node.
    142 * @dsi:          Our MIPI DSI source.
    143 * @refclk:       Our reference clock.
    144 * @next_bridge:  The bridge on the eDP side.
    145 * @enable_gpio:  The GPIO we toggle to enable the bridge.
    146 * @supplies:     Data for bulk enabling/disabling our regulators.
    147 * @dp_lanes:     Count of dp_lanes we're using.
    148 * @ln_assign:    Value to program to the LN_ASSIGN register.
    149 * @ln_polrs:     Value for the 4-bit LN_POLRS field of SN_ENH_FRAME_REG.
    150 * @comms_enabled: If true then communication over the aux channel is enabled.
    151 * @comms_mutex:   Protects modification of comms_enabled.
    152 *
    153 * @gchip:        If we expose our GPIOs, this is used.
    154 * @gchip_output: A cache of whether we've set GPIOs to output.  This
    155 *                serves double-duty of keeping track of the direction and
    156 *                also keeping track of whether we've incremented the
    157 *                pm_runtime reference count for this pin, which we do
    158 *                whenever a pin is configured as an output.  This is a
    159 *                bitmap so we can do atomic ops on it without an extra
    160 *                lock so concurrent users of our 4 GPIOs don't stomp on
    161 *                each other's read-modify-write.
    162 *
    163 * @pchip:        pwm_chip if the PWM is exposed.
    164 * @pwm_enabled:  Used to track if the PWM signal is currently enabled.
    165 * @pwm_pin_busy: Track if GPIO4 is currently requested for GPIO or PWM.
    166 * @pwm_refclk_freq: Cache for the reference clock input to the PWM.
    167 */
    168struct ti_sn65dsi86 {
    169	struct auxiliary_device		bridge_aux;
    170	struct auxiliary_device		gpio_aux;
    171	struct auxiliary_device		aux_aux;
    172	struct auxiliary_device		pwm_aux;
    173
    174	struct device			*dev;
    175	struct regmap			*regmap;
    176	struct drm_dp_aux		aux;
    177	struct drm_bridge		bridge;
    178	struct drm_connector		*connector;
    179	struct device_node		*host_node;
    180	struct mipi_dsi_device		*dsi;
    181	struct clk			*refclk;
    182	struct drm_bridge		*next_bridge;
    183	struct gpio_desc		*enable_gpio;
    184	struct regulator_bulk_data	supplies[SN_REGULATOR_SUPPLY_NUM];
    185	int				dp_lanes;
    186	u8				ln_assign;
    187	u8				ln_polrs;
    188	bool				comms_enabled;
    189	struct mutex			comms_mutex;
    190
    191#if defined(CONFIG_OF_GPIO)
    192	struct gpio_chip		gchip;
    193	DECLARE_BITMAP(gchip_output, SN_NUM_GPIOS);
    194#endif
    195#if defined(CONFIG_PWM)
    196	struct pwm_chip			pchip;
    197	bool				pwm_enabled;
    198	atomic_t			pwm_pin_busy;
    199#endif
    200	unsigned int			pwm_refclk_freq;
    201};
    202
    203static const struct regmap_range ti_sn65dsi86_volatile_ranges[] = {
    204	{ .range_min = 0, .range_max = 0xFF },
    205};
    206
    207static const struct regmap_access_table ti_sn_bridge_volatile_table = {
    208	.yes_ranges = ti_sn65dsi86_volatile_ranges,
    209	.n_yes_ranges = ARRAY_SIZE(ti_sn65dsi86_volatile_ranges),
    210};
    211
    212static const struct regmap_config ti_sn65dsi86_regmap_config = {
    213	.reg_bits = 8,
    214	.val_bits = 8,
    215	.volatile_table = &ti_sn_bridge_volatile_table,
    216	.cache_type = REGCACHE_NONE,
    217	.max_register = 0xFF,
    218};
    219
    220static int __maybe_unused ti_sn65dsi86_read_u16(struct ti_sn65dsi86 *pdata,
    221						unsigned int reg, u16 *val)
    222{
    223	u8 buf[2];
    224	int ret;
    225
    226	ret = regmap_bulk_read(pdata->regmap, reg, buf, ARRAY_SIZE(buf));
    227	if (ret)
    228		return ret;
    229
    230	*val = buf[0] | (buf[1] << 8);
    231
    232	return 0;
    233}
    234
    235static void ti_sn65dsi86_write_u16(struct ti_sn65dsi86 *pdata,
    236				   unsigned int reg, u16 val)
    237{
    238	u8 buf[2] = { val & 0xff, val >> 8 };
    239
    240	regmap_bulk_write(pdata->regmap, reg, buf, ARRAY_SIZE(buf));
    241}
    242
    243static u32 ti_sn_bridge_get_dsi_freq(struct ti_sn65dsi86 *pdata)
    244{
    245	u32 bit_rate_khz, clk_freq_khz;
    246	struct drm_display_mode *mode =
    247		&pdata->bridge.encoder->crtc->state->adjusted_mode;
    248
    249	bit_rate_khz = mode->clock *
    250			mipi_dsi_pixel_format_to_bpp(pdata->dsi->format);
    251	clk_freq_khz = bit_rate_khz / (pdata->dsi->lanes * 2);
    252
    253	return clk_freq_khz;
    254}
    255
    256/* clk frequencies supported by bridge in Hz in case derived from REFCLK pin */
    257static const u32 ti_sn_bridge_refclk_lut[] = {
    258	12000000,
    259	19200000,
    260	26000000,
    261	27000000,
    262	38400000,
    263};
    264
    265/* clk frequencies supported by bridge in Hz in case derived from DACP/N pin */
    266static const u32 ti_sn_bridge_dsiclk_lut[] = {
    267	468000000,
    268	384000000,
    269	416000000,
    270	486000000,
    271	460800000,
    272};
    273
    274static void ti_sn_bridge_set_refclk_freq(struct ti_sn65dsi86 *pdata)
    275{
    276	int i;
    277	u32 refclk_rate;
    278	const u32 *refclk_lut;
    279	size_t refclk_lut_size;
    280
    281	if (pdata->refclk) {
    282		refclk_rate = clk_get_rate(pdata->refclk);
    283		refclk_lut = ti_sn_bridge_refclk_lut;
    284		refclk_lut_size = ARRAY_SIZE(ti_sn_bridge_refclk_lut);
    285		clk_prepare_enable(pdata->refclk);
    286	} else {
    287		refclk_rate = ti_sn_bridge_get_dsi_freq(pdata) * 1000;
    288		refclk_lut = ti_sn_bridge_dsiclk_lut;
    289		refclk_lut_size = ARRAY_SIZE(ti_sn_bridge_dsiclk_lut);
    290	}
    291
    292	/* for i equals to refclk_lut_size means default frequency */
    293	for (i = 0; i < refclk_lut_size; i++)
    294		if (refclk_lut[i] == refclk_rate)
    295			break;
    296
    297	regmap_update_bits(pdata->regmap, SN_DPPLL_SRC_REG, REFCLK_FREQ_MASK,
    298			   REFCLK_FREQ(i));
    299
    300	/*
    301	 * The PWM refclk is based on the value written to SN_DPPLL_SRC_REG,
    302	 * regardless of its actual sourcing.
    303	 */
    304	pdata->pwm_refclk_freq = ti_sn_bridge_refclk_lut[i];
    305}
    306
    307static void ti_sn65dsi86_enable_comms(struct ti_sn65dsi86 *pdata)
    308{
    309	mutex_lock(&pdata->comms_mutex);
    310
    311	/* configure bridge ref_clk */
    312	ti_sn_bridge_set_refclk_freq(pdata);
    313
    314	/*
    315	 * HPD on this bridge chip is a bit useless.  This is an eDP bridge
    316	 * so the HPD is an internal signal that's only there to signal that
    317	 * the panel is done powering up.  ...but the bridge chip debounces
    318	 * this signal by between 100 ms and 400 ms (depending on process,
    319	 * voltage, and temperate--I measured it at about 200 ms).  One
    320	 * particular panel asserted HPD 84 ms after it was powered on meaning
    321	 * that we saw HPD 284 ms after power on.  ...but the same panel said
    322	 * that instead of looking at HPD you could just hardcode a delay of
    323	 * 200 ms.  We'll assume that the panel driver will have the hardcoded
    324	 * delay in its prepare and always disable HPD.
    325	 *
    326	 * If HPD somehow makes sense on some future panel we'll have to
    327	 * change this to be conditional on someone specifying that HPD should
    328	 * be used.
    329	 */
    330	regmap_update_bits(pdata->regmap, SN_HPD_DISABLE_REG, HPD_DISABLE,
    331			   HPD_DISABLE);
    332
    333	pdata->comms_enabled = true;
    334
    335	mutex_unlock(&pdata->comms_mutex);
    336}
    337
    338static void ti_sn65dsi86_disable_comms(struct ti_sn65dsi86 *pdata)
    339{
    340	mutex_lock(&pdata->comms_mutex);
    341
    342	pdata->comms_enabled = false;
    343	clk_disable_unprepare(pdata->refclk);
    344
    345	mutex_unlock(&pdata->comms_mutex);
    346}
    347
    348static int __maybe_unused ti_sn65dsi86_resume(struct device *dev)
    349{
    350	struct ti_sn65dsi86 *pdata = dev_get_drvdata(dev);
    351	int ret;
    352
    353	ret = regulator_bulk_enable(SN_REGULATOR_SUPPLY_NUM, pdata->supplies);
    354	if (ret) {
    355		DRM_ERROR("failed to enable supplies %d\n", ret);
    356		return ret;
    357	}
    358
    359	/* td2: min 100 us after regulators before enabling the GPIO */
    360	usleep_range(100, 110);
    361
    362	gpiod_set_value(pdata->enable_gpio, 1);
    363
    364	/*
    365	 * If we have a reference clock we can enable communication w/ the
    366	 * panel (including the aux channel) w/out any need for an input clock
    367	 * so we can do it in resume which lets us read the EDID before
    368	 * pre_enable(). Without a reference clock we need the MIPI reference
    369	 * clock so reading early doesn't work.
    370	 */
    371	if (pdata->refclk)
    372		ti_sn65dsi86_enable_comms(pdata);
    373
    374	return ret;
    375}
    376
    377static int __maybe_unused ti_sn65dsi86_suspend(struct device *dev)
    378{
    379	struct ti_sn65dsi86 *pdata = dev_get_drvdata(dev);
    380	int ret;
    381
    382	if (pdata->refclk)
    383		ti_sn65dsi86_disable_comms(pdata);
    384
    385	gpiod_set_value(pdata->enable_gpio, 0);
    386
    387	ret = regulator_bulk_disable(SN_REGULATOR_SUPPLY_NUM, pdata->supplies);
    388	if (ret)
    389		DRM_ERROR("failed to disable supplies %d\n", ret);
    390
    391	return ret;
    392}
    393
    394static const struct dev_pm_ops ti_sn65dsi86_pm_ops = {
    395	SET_RUNTIME_PM_OPS(ti_sn65dsi86_suspend, ti_sn65dsi86_resume, NULL)
    396	SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
    397				pm_runtime_force_resume)
    398};
    399
    400static int status_show(struct seq_file *s, void *data)
    401{
    402	struct ti_sn65dsi86 *pdata = s->private;
    403	unsigned int reg, val;
    404
    405	seq_puts(s, "STATUS REGISTERS:\n");
    406
    407	pm_runtime_get_sync(pdata->dev);
    408
    409	/* IRQ Status Registers, see Table 31 in datasheet */
    410	for (reg = 0xf0; reg <= 0xf8; reg++) {
    411		regmap_read(pdata->regmap, reg, &val);
    412		seq_printf(s, "[0x%02x] = 0x%08x\n", reg, val);
    413	}
    414
    415	pm_runtime_put_autosuspend(pdata->dev);
    416
    417	return 0;
    418}
    419
    420DEFINE_SHOW_ATTRIBUTE(status);
    421
    422static void ti_sn65dsi86_debugfs_remove(void *data)
    423{
    424	debugfs_remove_recursive(data);
    425}
    426
    427static void ti_sn65dsi86_debugfs_init(struct ti_sn65dsi86 *pdata)
    428{
    429	struct device *dev = pdata->dev;
    430	struct dentry *debugfs;
    431	int ret;
    432
    433	debugfs = debugfs_create_dir(dev_name(dev), NULL);
    434
    435	/*
    436	 * We might get an error back if debugfs wasn't enabled in the kernel
    437	 * so let's just silently return upon failure.
    438	 */
    439	if (IS_ERR_OR_NULL(debugfs))
    440		return;
    441
    442	ret = devm_add_action_or_reset(dev, ti_sn65dsi86_debugfs_remove, debugfs);
    443	if (ret)
    444		return;
    445
    446	debugfs_create_file("status", 0600, debugfs, pdata, &status_fops);
    447}
    448
    449/* -----------------------------------------------------------------------------
    450 * Auxiliary Devices (*not* AUX)
    451 */
    452
    453static void ti_sn65dsi86_uninit_aux(void *data)
    454{
    455	auxiliary_device_uninit(data);
    456}
    457
    458static void ti_sn65dsi86_delete_aux(void *data)
    459{
    460	auxiliary_device_delete(data);
    461}
    462
    463/*
    464 * AUX bus docs say that a non-NULL release is mandatory, but it makes no
    465 * sense for the model used here where all of the aux devices are allocated
    466 * in the single shared structure. We'll use this noop as a workaround.
    467 */
    468static void ti_sn65dsi86_noop(struct device *dev) {}
    469
    470static int ti_sn65dsi86_add_aux_device(struct ti_sn65dsi86 *pdata,
    471				       struct auxiliary_device *aux,
    472				       const char *name)
    473{
    474	struct device *dev = pdata->dev;
    475	int ret;
    476
    477	aux->name = name;
    478	aux->dev.parent = dev;
    479	aux->dev.release = ti_sn65dsi86_noop;
    480	device_set_of_node_from_dev(&aux->dev, dev);
    481	ret = auxiliary_device_init(aux);
    482	if (ret)
    483		return ret;
    484	ret = devm_add_action_or_reset(dev, ti_sn65dsi86_uninit_aux, aux);
    485	if (ret)
    486		return ret;
    487
    488	ret = auxiliary_device_add(aux);
    489	if (ret)
    490		return ret;
    491	ret = devm_add_action_or_reset(dev, ti_sn65dsi86_delete_aux, aux);
    492
    493	return ret;
    494}
    495
    496/* -----------------------------------------------------------------------------
    497 * AUX Adapter
    498 */
    499
    500static struct ti_sn65dsi86 *aux_to_ti_sn65dsi86(struct drm_dp_aux *aux)
    501{
    502	return container_of(aux, struct ti_sn65dsi86, aux);
    503}
    504
    505static ssize_t ti_sn_aux_transfer(struct drm_dp_aux *aux,
    506				  struct drm_dp_aux_msg *msg)
    507{
    508	struct ti_sn65dsi86 *pdata = aux_to_ti_sn65dsi86(aux);
    509	u32 request = msg->request & ~(DP_AUX_I2C_MOT | DP_AUX_I2C_WRITE_STATUS_UPDATE);
    510	u32 request_val = AUX_CMD_REQ(msg->request);
    511	u8 *buf = msg->buffer;
    512	unsigned int len = msg->size;
    513	unsigned int val;
    514	int ret;
    515	u8 addr_len[SN_AUX_LENGTH_REG + 1 - SN_AUX_ADDR_19_16_REG];
    516
    517	if (len > SN_AUX_MAX_PAYLOAD_BYTES)
    518		return -EINVAL;
    519
    520	pm_runtime_get_sync(pdata->dev);
    521	mutex_lock(&pdata->comms_mutex);
    522
    523	/*
    524	 * If someone tries to do a DDC over AUX transaction before pre_enable()
    525	 * on a device without a dedicated reference clock then we just can't
    526	 * do it. Fail right away. This prevents non-refclk users from reading
    527	 * the EDID before enabling the panel but such is life.
    528	 */
    529	if (!pdata->comms_enabled) {
    530		ret = -EIO;
    531		goto exit;
    532	}
    533
    534	switch (request) {
    535	case DP_AUX_NATIVE_WRITE:
    536	case DP_AUX_I2C_WRITE:
    537	case DP_AUX_NATIVE_READ:
    538	case DP_AUX_I2C_READ:
    539		regmap_write(pdata->regmap, SN_AUX_CMD_REG, request_val);
    540		/* Assume it's good */
    541		msg->reply = 0;
    542		break;
    543	default:
    544		ret = -EINVAL;
    545		goto exit;
    546	}
    547
    548	BUILD_BUG_ON(sizeof(addr_len) != sizeof(__be32));
    549	put_unaligned_be32((msg->address & SN_AUX_ADDR_MASK) << 8 | len,
    550			   addr_len);
    551	regmap_bulk_write(pdata->regmap, SN_AUX_ADDR_19_16_REG, addr_len,
    552			  ARRAY_SIZE(addr_len));
    553
    554	if (request == DP_AUX_NATIVE_WRITE || request == DP_AUX_I2C_WRITE)
    555		regmap_bulk_write(pdata->regmap, SN_AUX_WDATA_REG(0), buf, len);
    556
    557	/* Clear old status bits before start so we don't get confused */
    558	regmap_write(pdata->regmap, SN_AUX_CMD_STATUS_REG,
    559		     AUX_IRQ_STATUS_NAT_I2C_FAIL |
    560		     AUX_IRQ_STATUS_AUX_RPLY_TOUT |
    561		     AUX_IRQ_STATUS_AUX_SHORT);
    562
    563	regmap_write(pdata->regmap, SN_AUX_CMD_REG, request_val | AUX_CMD_SEND);
    564
    565	/* Zero delay loop because i2c transactions are slow already */
    566	ret = regmap_read_poll_timeout(pdata->regmap, SN_AUX_CMD_REG, val,
    567				       !(val & AUX_CMD_SEND), 0, 50 * 1000);
    568	if (ret)
    569		goto exit;
    570
    571	ret = regmap_read(pdata->regmap, SN_AUX_CMD_STATUS_REG, &val);
    572	if (ret)
    573		goto exit;
    574
    575	if (val & AUX_IRQ_STATUS_AUX_RPLY_TOUT) {
    576		/*
    577		 * The hardware tried the message seven times per the DP spec
    578		 * but it hit a timeout. We ignore defers here because they're
    579		 * handled in hardware.
    580		 */
    581		ret = -ETIMEDOUT;
    582		goto exit;
    583	}
    584
    585	if (val & AUX_IRQ_STATUS_AUX_SHORT) {
    586		ret = regmap_read(pdata->regmap, SN_AUX_LENGTH_REG, &len);
    587		if (ret)
    588			goto exit;
    589	} else if (val & AUX_IRQ_STATUS_NAT_I2C_FAIL) {
    590		switch (request) {
    591		case DP_AUX_I2C_WRITE:
    592		case DP_AUX_I2C_READ:
    593			msg->reply |= DP_AUX_I2C_REPLY_NACK;
    594			break;
    595		case DP_AUX_NATIVE_READ:
    596		case DP_AUX_NATIVE_WRITE:
    597			msg->reply |= DP_AUX_NATIVE_REPLY_NACK;
    598			break;
    599		}
    600		len = 0;
    601		goto exit;
    602	}
    603
    604	if (request != DP_AUX_NATIVE_WRITE && request != DP_AUX_I2C_WRITE && len != 0)
    605		ret = regmap_bulk_read(pdata->regmap, SN_AUX_RDATA_REG(0), buf, len);
    606
    607exit:
    608	mutex_unlock(&pdata->comms_mutex);
    609	pm_runtime_mark_last_busy(pdata->dev);
    610	pm_runtime_put_autosuspend(pdata->dev);
    611
    612	if (ret)
    613		return ret;
    614	return len;
    615}
    616
    617static int ti_sn_aux_probe(struct auxiliary_device *adev,
    618			   const struct auxiliary_device_id *id)
    619{
    620	struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent);
    621	int ret;
    622
    623	pdata->aux.name = "ti-sn65dsi86-aux";
    624	pdata->aux.dev = &adev->dev;
    625	pdata->aux.transfer = ti_sn_aux_transfer;
    626	drm_dp_aux_init(&pdata->aux);
    627
    628	ret = devm_of_dp_aux_populate_ep_devices(&pdata->aux);
    629	if (ret)
    630		return ret;
    631
    632	/*
    633	 * The eDP to MIPI bridge parts don't work until the AUX channel is
    634	 * setup so we don't add it in the main driver probe, we add it now.
    635	 */
    636	return ti_sn65dsi86_add_aux_device(pdata, &pdata->bridge_aux, "bridge");
    637}
    638
    639static const struct auxiliary_device_id ti_sn_aux_id_table[] = {
    640	{ .name = "ti_sn65dsi86.aux", },
    641	{},
    642};
    643
    644static struct auxiliary_driver ti_sn_aux_driver = {
    645	.name = "aux",
    646	.probe = ti_sn_aux_probe,
    647	.id_table = ti_sn_aux_id_table,
    648};
    649
    650/*------------------------------------------------------------------------------
    651 * DRM Bridge
    652 */
    653
    654static struct ti_sn65dsi86 *bridge_to_ti_sn65dsi86(struct drm_bridge *bridge)
    655{
    656	return container_of(bridge, struct ti_sn65dsi86, bridge);
    657}
    658
    659static int ti_sn_attach_host(struct ti_sn65dsi86 *pdata)
    660{
    661	int val;
    662	struct mipi_dsi_host *host;
    663	struct mipi_dsi_device *dsi;
    664	struct device *dev = pdata->dev;
    665	const struct mipi_dsi_device_info info = { .type = "ti_sn_bridge",
    666						   .channel = 0,
    667						   .node = NULL,
    668	};
    669
    670	host = of_find_mipi_dsi_host_by_node(pdata->host_node);
    671	if (!host)
    672		return -EPROBE_DEFER;
    673
    674	dsi = devm_mipi_dsi_device_register_full(dev, host, &info);
    675	if (IS_ERR(dsi))
    676		return PTR_ERR(dsi);
    677
    678	/* TODO: setting to 4 MIPI lanes always for now */
    679	dsi->lanes = 4;
    680	dsi->format = MIPI_DSI_FMT_RGB888;
    681	dsi->mode_flags = MIPI_DSI_MODE_VIDEO;
    682
    683	/* check if continuous dsi clock is required or not */
    684	pm_runtime_get_sync(dev);
    685	regmap_read(pdata->regmap, SN_DPPLL_SRC_REG, &val);
    686	pm_runtime_put_autosuspend(dev);
    687	if (!(val & DPPLL_CLK_SRC_DSICLK))
    688		dsi->mode_flags |= MIPI_DSI_CLOCK_NON_CONTINUOUS;
    689
    690	pdata->dsi = dsi;
    691
    692	return devm_mipi_dsi_attach(dev, dsi);
    693}
    694
    695static int ti_sn_bridge_attach(struct drm_bridge *bridge,
    696			       enum drm_bridge_attach_flags flags)
    697{
    698	struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge);
    699	int ret;
    700
    701	if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) {
    702		DRM_ERROR("Fix bridge driver to make connector optional!");
    703		return -EINVAL;
    704	}
    705
    706	pdata->aux.drm_dev = bridge->dev;
    707	ret = drm_dp_aux_register(&pdata->aux);
    708	if (ret < 0) {
    709		drm_err(bridge->dev, "Failed to register DP AUX channel: %d\n", ret);
    710		return ret;
    711	}
    712
    713	/* We never want the next bridge to *also* create a connector: */
    714	flags |= DRM_BRIDGE_ATTACH_NO_CONNECTOR;
    715
    716	/* Attach the next bridge */
    717	ret = drm_bridge_attach(bridge->encoder, pdata->next_bridge,
    718				&pdata->bridge, flags);
    719	if (ret < 0)
    720		goto err_initted_aux;
    721
    722	pdata->connector = drm_bridge_connector_init(pdata->bridge.dev,
    723						     pdata->bridge.encoder);
    724	if (IS_ERR(pdata->connector)) {
    725		ret = PTR_ERR(pdata->connector);
    726		goto err_initted_aux;
    727	}
    728
    729	drm_connector_attach_encoder(pdata->connector, pdata->bridge.encoder);
    730
    731	return 0;
    732
    733err_initted_aux:
    734	drm_dp_aux_unregister(&pdata->aux);
    735	return ret;
    736}
    737
    738static void ti_sn_bridge_detach(struct drm_bridge *bridge)
    739{
    740	drm_dp_aux_unregister(&bridge_to_ti_sn65dsi86(bridge)->aux);
    741}
    742
    743static enum drm_mode_status
    744ti_sn_bridge_mode_valid(struct drm_bridge *bridge,
    745			const struct drm_display_info *info,
    746			const struct drm_display_mode *mode)
    747{
    748	/* maximum supported resolution is 4K at 60 fps */
    749	if (mode->clock > 594000)
    750		return MODE_CLOCK_HIGH;
    751
    752	return MODE_OK;
    753}
    754
    755static void ti_sn_bridge_disable(struct drm_bridge *bridge)
    756{
    757	struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge);
    758
    759	/* disable video stream */
    760	regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, VSTREAM_ENABLE, 0);
    761}
    762
    763static void ti_sn_bridge_set_dsi_rate(struct ti_sn65dsi86 *pdata)
    764{
    765	unsigned int bit_rate_mhz, clk_freq_mhz;
    766	unsigned int val;
    767	struct drm_display_mode *mode =
    768		&pdata->bridge.encoder->crtc->state->adjusted_mode;
    769
    770	/* set DSIA clk frequency */
    771	bit_rate_mhz = (mode->clock / 1000) *
    772			mipi_dsi_pixel_format_to_bpp(pdata->dsi->format);
    773	clk_freq_mhz = bit_rate_mhz / (pdata->dsi->lanes * 2);
    774
    775	/* for each increment in val, frequency increases by 5MHz */
    776	val = (MIN_DSI_CLK_FREQ_MHZ / 5) +
    777		(((clk_freq_mhz - MIN_DSI_CLK_FREQ_MHZ) / 5) & 0xFF);
    778	regmap_write(pdata->regmap, SN_DSIA_CLK_FREQ_REG, val);
    779}
    780
    781static unsigned int ti_sn_bridge_get_bpp(struct ti_sn65dsi86 *pdata)
    782{
    783	if (pdata->connector->display_info.bpc <= 6)
    784		return 18;
    785	else
    786		return 24;
    787}
    788
    789/*
    790 * LUT index corresponds to register value and
    791 * LUT values corresponds to dp data rate supported
    792 * by the bridge in Mbps unit.
    793 */
    794static const unsigned int ti_sn_bridge_dp_rate_lut[] = {
    795	0, 1620, 2160, 2430, 2700, 3240, 4320, 5400
    796};
    797
    798static int ti_sn_bridge_calc_min_dp_rate_idx(struct ti_sn65dsi86 *pdata)
    799{
    800	unsigned int bit_rate_khz, dp_rate_mhz;
    801	unsigned int i;
    802	struct drm_display_mode *mode =
    803		&pdata->bridge.encoder->crtc->state->adjusted_mode;
    804
    805	/* Calculate minimum bit rate based on our pixel clock. */
    806	bit_rate_khz = mode->clock * ti_sn_bridge_get_bpp(pdata);
    807
    808	/* Calculate minimum DP data rate, taking 80% as per DP spec */
    809	dp_rate_mhz = DIV_ROUND_UP(bit_rate_khz * DP_CLK_FUDGE_NUM,
    810				   1000 * pdata->dp_lanes * DP_CLK_FUDGE_DEN);
    811
    812	for (i = 1; i < ARRAY_SIZE(ti_sn_bridge_dp_rate_lut) - 1; i++)
    813		if (ti_sn_bridge_dp_rate_lut[i] >= dp_rate_mhz)
    814			break;
    815
    816	return i;
    817}
    818
    819static unsigned int ti_sn_bridge_read_valid_rates(struct ti_sn65dsi86 *pdata)
    820{
    821	unsigned int valid_rates = 0;
    822	unsigned int rate_per_200khz;
    823	unsigned int rate_mhz;
    824	u8 dpcd_val;
    825	int ret;
    826	int i, j;
    827
    828	ret = drm_dp_dpcd_readb(&pdata->aux, DP_EDP_DPCD_REV, &dpcd_val);
    829	if (ret != 1) {
    830		DRM_DEV_ERROR(pdata->dev,
    831			      "Can't read eDP rev (%d), assuming 1.1\n", ret);
    832		dpcd_val = DP_EDP_11;
    833	}
    834
    835	if (dpcd_val >= DP_EDP_14) {
    836		/* eDP 1.4 devices must provide a custom table */
    837		__le16 sink_rates[DP_MAX_SUPPORTED_RATES];
    838
    839		ret = drm_dp_dpcd_read(&pdata->aux, DP_SUPPORTED_LINK_RATES,
    840				       sink_rates, sizeof(sink_rates));
    841
    842		if (ret != sizeof(sink_rates)) {
    843			DRM_DEV_ERROR(pdata->dev,
    844				"Can't read supported rate table (%d)\n", ret);
    845
    846			/* By zeroing we'll fall back to DP_MAX_LINK_RATE. */
    847			memset(sink_rates, 0, sizeof(sink_rates));
    848		}
    849
    850		for (i = 0; i < ARRAY_SIZE(sink_rates); i++) {
    851			rate_per_200khz = le16_to_cpu(sink_rates[i]);
    852
    853			if (!rate_per_200khz)
    854				break;
    855
    856			rate_mhz = rate_per_200khz * 200 / 1000;
    857			for (j = 0;
    858			     j < ARRAY_SIZE(ti_sn_bridge_dp_rate_lut);
    859			     j++) {
    860				if (ti_sn_bridge_dp_rate_lut[j] == rate_mhz)
    861					valid_rates |= BIT(j);
    862			}
    863		}
    864
    865		for (i = 0; i < ARRAY_SIZE(ti_sn_bridge_dp_rate_lut); i++) {
    866			if (valid_rates & BIT(i))
    867				return valid_rates;
    868		}
    869		DRM_DEV_ERROR(pdata->dev,
    870			      "No matching eDP rates in table; falling back\n");
    871	}
    872
    873	/* On older versions best we can do is use DP_MAX_LINK_RATE */
    874	ret = drm_dp_dpcd_readb(&pdata->aux, DP_MAX_LINK_RATE, &dpcd_val);
    875	if (ret != 1) {
    876		DRM_DEV_ERROR(pdata->dev,
    877			      "Can't read max rate (%d); assuming 5.4 GHz\n",
    878			      ret);
    879		dpcd_val = DP_LINK_BW_5_4;
    880	}
    881
    882	switch (dpcd_val) {
    883	default:
    884		DRM_DEV_ERROR(pdata->dev,
    885			      "Unexpected max rate (%#x); assuming 5.4 GHz\n",
    886			      (int)dpcd_val);
    887		fallthrough;
    888	case DP_LINK_BW_5_4:
    889		valid_rates |= BIT(7);
    890		fallthrough;
    891	case DP_LINK_BW_2_7:
    892		valid_rates |= BIT(4);
    893		fallthrough;
    894	case DP_LINK_BW_1_62:
    895		valid_rates |= BIT(1);
    896		break;
    897	}
    898
    899	return valid_rates;
    900}
    901
    902static void ti_sn_bridge_set_video_timings(struct ti_sn65dsi86 *pdata)
    903{
    904	struct drm_display_mode *mode =
    905		&pdata->bridge.encoder->crtc->state->adjusted_mode;
    906	u8 hsync_polarity = 0, vsync_polarity = 0;
    907
    908	if (mode->flags & DRM_MODE_FLAG_PHSYNC)
    909		hsync_polarity = CHA_HSYNC_POLARITY;
    910	if (mode->flags & DRM_MODE_FLAG_PVSYNC)
    911		vsync_polarity = CHA_VSYNC_POLARITY;
    912
    913	ti_sn65dsi86_write_u16(pdata, SN_CHA_ACTIVE_LINE_LENGTH_LOW_REG,
    914			       mode->hdisplay);
    915	ti_sn65dsi86_write_u16(pdata, SN_CHA_VERTICAL_DISPLAY_SIZE_LOW_REG,
    916			       mode->vdisplay);
    917	regmap_write(pdata->regmap, SN_CHA_HSYNC_PULSE_WIDTH_LOW_REG,
    918		     (mode->hsync_end - mode->hsync_start) & 0xFF);
    919	regmap_write(pdata->regmap, SN_CHA_HSYNC_PULSE_WIDTH_HIGH_REG,
    920		     (((mode->hsync_end - mode->hsync_start) >> 8) & 0x7F) |
    921		     hsync_polarity);
    922	regmap_write(pdata->regmap, SN_CHA_VSYNC_PULSE_WIDTH_LOW_REG,
    923		     (mode->vsync_end - mode->vsync_start) & 0xFF);
    924	regmap_write(pdata->regmap, SN_CHA_VSYNC_PULSE_WIDTH_HIGH_REG,
    925		     (((mode->vsync_end - mode->vsync_start) >> 8) & 0x7F) |
    926		     vsync_polarity);
    927
    928	regmap_write(pdata->regmap, SN_CHA_HORIZONTAL_BACK_PORCH_REG,
    929		     (mode->htotal - mode->hsync_end) & 0xFF);
    930	regmap_write(pdata->regmap, SN_CHA_VERTICAL_BACK_PORCH_REG,
    931		     (mode->vtotal - mode->vsync_end) & 0xFF);
    932
    933	regmap_write(pdata->regmap, SN_CHA_HORIZONTAL_FRONT_PORCH_REG,
    934		     (mode->hsync_start - mode->hdisplay) & 0xFF);
    935	regmap_write(pdata->regmap, SN_CHA_VERTICAL_FRONT_PORCH_REG,
    936		     (mode->vsync_start - mode->vdisplay) & 0xFF);
    937
    938	usleep_range(10000, 10500); /* 10ms delay recommended by spec */
    939}
    940
    941static unsigned int ti_sn_get_max_lanes(struct ti_sn65dsi86 *pdata)
    942{
    943	u8 data;
    944	int ret;
    945
    946	ret = drm_dp_dpcd_readb(&pdata->aux, DP_MAX_LANE_COUNT, &data);
    947	if (ret != 1) {
    948		DRM_DEV_ERROR(pdata->dev,
    949			      "Can't read lane count (%d); assuming 4\n", ret);
    950		return 4;
    951	}
    952
    953	return data & DP_LANE_COUNT_MASK;
    954}
    955
    956static int ti_sn_link_training(struct ti_sn65dsi86 *pdata, int dp_rate_idx,
    957			       const char **last_err_str)
    958{
    959	unsigned int val;
    960	int ret;
    961	int i;
    962
    963	/* set dp clk frequency value */
    964	regmap_update_bits(pdata->regmap, SN_DATARATE_CONFIG_REG,
    965			   DP_DATARATE_MASK, DP_DATARATE(dp_rate_idx));
    966
    967	/* enable DP PLL */
    968	regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 1);
    969
    970	ret = regmap_read_poll_timeout(pdata->regmap, SN_DPPLL_SRC_REG, val,
    971				       val & DPPLL_SRC_DP_PLL_LOCK, 1000,
    972				       50 * 1000);
    973	if (ret) {
    974		*last_err_str = "DP_PLL_LOCK polling failed";
    975		goto exit;
    976	}
    977
    978	/*
    979	 * We'll try to link train several times.  As part of link training
    980	 * the bridge chip will write DP_SET_POWER_D0 to DP_SET_POWER.  If
    981	 * the panel isn't ready quite it might respond NAK here which means
    982	 * we need to try again.
    983	 */
    984	for (i = 0; i < SN_LINK_TRAINING_TRIES; i++) {
    985		/* Semi auto link training mode */
    986		regmap_write(pdata->regmap, SN_ML_TX_MODE_REG, 0x0A);
    987		ret = regmap_read_poll_timeout(pdata->regmap, SN_ML_TX_MODE_REG, val,
    988					       val == ML_TX_MAIN_LINK_OFF ||
    989					       val == ML_TX_NORMAL_MODE, 1000,
    990					       500 * 1000);
    991		if (ret) {
    992			*last_err_str = "Training complete polling failed";
    993		} else if (val == ML_TX_MAIN_LINK_OFF) {
    994			*last_err_str = "Link training failed, link is off";
    995			ret = -EIO;
    996			continue;
    997		}
    998
    999		break;
   1000	}
   1001
   1002	/* If we saw quite a few retries, add a note about it */
   1003	if (!ret && i > SN_LINK_TRAINING_TRIES / 2)
   1004		DRM_DEV_INFO(pdata->dev, "Link training needed %d retries\n", i);
   1005
   1006exit:
   1007	/* Disable the PLL if we failed */
   1008	if (ret)
   1009		regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 0);
   1010
   1011	return ret;
   1012}
   1013
   1014static void ti_sn_bridge_enable(struct drm_bridge *bridge)
   1015{
   1016	struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge);
   1017	const char *last_err_str = "No supported DP rate";
   1018	unsigned int valid_rates;
   1019	int dp_rate_idx;
   1020	unsigned int val;
   1021	int ret = -EINVAL;
   1022	int max_dp_lanes;
   1023
   1024	max_dp_lanes = ti_sn_get_max_lanes(pdata);
   1025	pdata->dp_lanes = min(pdata->dp_lanes, max_dp_lanes);
   1026
   1027	/* DSI_A lane config */
   1028	val = CHA_DSI_LANES(SN_MAX_DP_LANES - pdata->dsi->lanes);
   1029	regmap_update_bits(pdata->regmap, SN_DSI_LANES_REG,
   1030			   CHA_DSI_LANES_MASK, val);
   1031
   1032	regmap_write(pdata->regmap, SN_LN_ASSIGN_REG, pdata->ln_assign);
   1033	regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, LN_POLRS_MASK,
   1034			   pdata->ln_polrs << LN_POLRS_OFFSET);
   1035
   1036	/* set dsi clk frequency value */
   1037	ti_sn_bridge_set_dsi_rate(pdata);
   1038
   1039	/*
   1040	 * The SN65DSI86 only supports ASSR Display Authentication method and
   1041	 * this method is enabled by default. An eDP panel must support this
   1042	 * authentication method. We need to enable this method in the eDP panel
   1043	 * at DisplayPort address 0x0010A prior to link training.
   1044	 */
   1045	drm_dp_dpcd_writeb(&pdata->aux, DP_EDP_CONFIGURATION_SET,
   1046			   DP_ALTERNATE_SCRAMBLER_RESET_ENABLE);
   1047
   1048	/* Set the DP output format (18 bpp or 24 bpp) */
   1049	val = (ti_sn_bridge_get_bpp(pdata) == 18) ? BPP_18_RGB : 0;
   1050	regmap_update_bits(pdata->regmap, SN_DATA_FORMAT_REG, BPP_18_RGB, val);
   1051
   1052	/* DP lane config */
   1053	val = DP_NUM_LANES(min(pdata->dp_lanes, 3));
   1054	regmap_update_bits(pdata->regmap, SN_SSC_CONFIG_REG, DP_NUM_LANES_MASK,
   1055			   val);
   1056
   1057	valid_rates = ti_sn_bridge_read_valid_rates(pdata);
   1058
   1059	/* Train until we run out of rates */
   1060	for (dp_rate_idx = ti_sn_bridge_calc_min_dp_rate_idx(pdata);
   1061	     dp_rate_idx < ARRAY_SIZE(ti_sn_bridge_dp_rate_lut);
   1062	     dp_rate_idx++) {
   1063		if (!(valid_rates & BIT(dp_rate_idx)))
   1064			continue;
   1065
   1066		ret = ti_sn_link_training(pdata, dp_rate_idx, &last_err_str);
   1067		if (!ret)
   1068			break;
   1069	}
   1070	if (ret) {
   1071		DRM_DEV_ERROR(pdata->dev, "%s (%d)\n", last_err_str, ret);
   1072		return;
   1073	}
   1074
   1075	/* config video parameters */
   1076	ti_sn_bridge_set_video_timings(pdata);
   1077
   1078	/* enable video stream */
   1079	regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, VSTREAM_ENABLE,
   1080			   VSTREAM_ENABLE);
   1081}
   1082
   1083static void ti_sn_bridge_pre_enable(struct drm_bridge *bridge)
   1084{
   1085	struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge);
   1086
   1087	pm_runtime_get_sync(pdata->dev);
   1088
   1089	if (!pdata->refclk)
   1090		ti_sn65dsi86_enable_comms(pdata);
   1091
   1092	/* td7: min 100 us after enable before DSI data */
   1093	usleep_range(100, 110);
   1094}
   1095
   1096static void ti_sn_bridge_post_disable(struct drm_bridge *bridge)
   1097{
   1098	struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge);
   1099
   1100	/* semi auto link training mode OFF */
   1101	regmap_write(pdata->regmap, SN_ML_TX_MODE_REG, 0);
   1102	/* Num lanes to 0 as per power sequencing in data sheet */
   1103	regmap_update_bits(pdata->regmap, SN_SSC_CONFIG_REG, DP_NUM_LANES_MASK, 0);
   1104	/* disable DP PLL */
   1105	regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 0);
   1106
   1107	if (!pdata->refclk)
   1108		ti_sn65dsi86_disable_comms(pdata);
   1109
   1110	pm_runtime_put_sync(pdata->dev);
   1111}
   1112
   1113static const struct drm_bridge_funcs ti_sn_bridge_funcs = {
   1114	.attach = ti_sn_bridge_attach,
   1115	.detach = ti_sn_bridge_detach,
   1116	.mode_valid = ti_sn_bridge_mode_valid,
   1117	.pre_enable = ti_sn_bridge_pre_enable,
   1118	.enable = ti_sn_bridge_enable,
   1119	.disable = ti_sn_bridge_disable,
   1120	.post_disable = ti_sn_bridge_post_disable,
   1121};
   1122
   1123static void ti_sn_bridge_parse_lanes(struct ti_sn65dsi86 *pdata,
   1124				     struct device_node *np)
   1125{
   1126	u32 lane_assignments[SN_MAX_DP_LANES] = { 0, 1, 2, 3 };
   1127	u32 lane_polarities[SN_MAX_DP_LANES] = { };
   1128	struct device_node *endpoint;
   1129	u8 ln_assign = 0;
   1130	u8 ln_polrs = 0;
   1131	int dp_lanes;
   1132	int i;
   1133
   1134	/*
   1135	 * Read config from the device tree about lane remapping and lane
   1136	 * polarities.  These are optional and we assume identity map and
   1137	 * normal polarity if nothing is specified.  It's OK to specify just
   1138	 * data-lanes but not lane-polarities but not vice versa.
   1139	 *
   1140	 * Error checking is light (we just make sure we don't crash or
   1141	 * buffer overrun) and we assume dts is well formed and specifying
   1142	 * mappings that the hardware supports.
   1143	 */
   1144	endpoint = of_graph_get_endpoint_by_regs(np, 1, -1);
   1145	dp_lanes = of_property_count_u32_elems(endpoint, "data-lanes");
   1146	if (dp_lanes > 0 && dp_lanes <= SN_MAX_DP_LANES) {
   1147		of_property_read_u32_array(endpoint, "data-lanes",
   1148					   lane_assignments, dp_lanes);
   1149		of_property_read_u32_array(endpoint, "lane-polarities",
   1150					   lane_polarities, dp_lanes);
   1151	} else {
   1152		dp_lanes = SN_MAX_DP_LANES;
   1153	}
   1154	of_node_put(endpoint);
   1155
   1156	/*
   1157	 * Convert into register format.  Loop over all lanes even if
   1158	 * data-lanes had fewer elements so that we nicely initialize
   1159	 * the LN_ASSIGN register.
   1160	 */
   1161	for (i = SN_MAX_DP_LANES - 1; i >= 0; i--) {
   1162		ln_assign = ln_assign << LN_ASSIGN_WIDTH | lane_assignments[i];
   1163		ln_polrs = ln_polrs << 1 | lane_polarities[i];
   1164	}
   1165
   1166	/* Stash in our struct for when we power on */
   1167	pdata->dp_lanes = dp_lanes;
   1168	pdata->ln_assign = ln_assign;
   1169	pdata->ln_polrs = ln_polrs;
   1170}
   1171
   1172static int ti_sn_bridge_parse_dsi_host(struct ti_sn65dsi86 *pdata)
   1173{
   1174	struct device_node *np = pdata->dev->of_node;
   1175
   1176	pdata->host_node = of_graph_get_remote_node(np, 0, 0);
   1177
   1178	if (!pdata->host_node) {
   1179		DRM_ERROR("remote dsi host node not found\n");
   1180		return -ENODEV;
   1181	}
   1182
   1183	return 0;
   1184}
   1185
   1186static int ti_sn_bridge_probe(struct auxiliary_device *adev,
   1187			      const struct auxiliary_device_id *id)
   1188{
   1189	struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent);
   1190	struct device_node *np = pdata->dev->of_node;
   1191	int ret;
   1192
   1193	pdata->next_bridge = devm_drm_of_get_bridge(pdata->dev, np, 1, 0);
   1194	if (IS_ERR(pdata->next_bridge)) {
   1195		DRM_ERROR("failed to create panel bridge\n");
   1196		return PTR_ERR(pdata->next_bridge);
   1197	}
   1198
   1199	ti_sn_bridge_parse_lanes(pdata, np);
   1200
   1201	ret = ti_sn_bridge_parse_dsi_host(pdata);
   1202	if (ret)
   1203		return ret;
   1204
   1205	pdata->bridge.funcs = &ti_sn_bridge_funcs;
   1206	pdata->bridge.of_node = np;
   1207
   1208	drm_bridge_add(&pdata->bridge);
   1209
   1210	ret = ti_sn_attach_host(pdata);
   1211	if (ret) {
   1212		dev_err_probe(pdata->dev, ret, "failed to attach dsi host\n");
   1213		goto err_remove_bridge;
   1214	}
   1215
   1216	return 0;
   1217
   1218err_remove_bridge:
   1219	drm_bridge_remove(&pdata->bridge);
   1220	return ret;
   1221}
   1222
   1223static void ti_sn_bridge_remove(struct auxiliary_device *adev)
   1224{
   1225	struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent);
   1226
   1227	if (!pdata)
   1228		return;
   1229
   1230	drm_bridge_remove(&pdata->bridge);
   1231
   1232	of_node_put(pdata->host_node);
   1233}
   1234
   1235static const struct auxiliary_device_id ti_sn_bridge_id_table[] = {
   1236	{ .name = "ti_sn65dsi86.bridge", },
   1237	{},
   1238};
   1239
   1240static struct auxiliary_driver ti_sn_bridge_driver = {
   1241	.name = "bridge",
   1242	.probe = ti_sn_bridge_probe,
   1243	.remove = ti_sn_bridge_remove,
   1244	.id_table = ti_sn_bridge_id_table,
   1245};
   1246
   1247/* -----------------------------------------------------------------------------
   1248 * PWM Controller
   1249 */
   1250#if defined(CONFIG_PWM)
   1251static int ti_sn_pwm_pin_request(struct ti_sn65dsi86 *pdata)
   1252{
   1253	return atomic_xchg(&pdata->pwm_pin_busy, 1) ? -EBUSY : 0;
   1254}
   1255
   1256static void ti_sn_pwm_pin_release(struct ti_sn65dsi86 *pdata)
   1257{
   1258	atomic_set(&pdata->pwm_pin_busy, 0);
   1259}
   1260
   1261static struct ti_sn65dsi86 *pwm_chip_to_ti_sn_bridge(struct pwm_chip *chip)
   1262{
   1263	return container_of(chip, struct ti_sn65dsi86, pchip);
   1264}
   1265
   1266static int ti_sn_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
   1267{
   1268	struct ti_sn65dsi86 *pdata = pwm_chip_to_ti_sn_bridge(chip);
   1269
   1270	return ti_sn_pwm_pin_request(pdata);
   1271}
   1272
   1273static void ti_sn_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm)
   1274{
   1275	struct ti_sn65dsi86 *pdata = pwm_chip_to_ti_sn_bridge(chip);
   1276
   1277	ti_sn_pwm_pin_release(pdata);
   1278}
   1279
   1280/*
   1281 * Limitations:
   1282 * - The PWM signal is not driven when the chip is powered down, or in its
   1283 *   reset state and the driver does not implement the "suspend state"
   1284 *   described in the documentation. In order to save power, state->enabled is
   1285 *   interpreted as denoting if the signal is expected to be valid, and is used
   1286 *   to determine if the chip needs to be kept powered.
   1287 * - Changing both period and duty_cycle is not done atomically, neither is the
   1288 *   multi-byte register updates, so the output might briefly be undefined
   1289 *   during update.
   1290 */
   1291static int ti_sn_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
   1292			   const struct pwm_state *state)
   1293{
   1294	struct ti_sn65dsi86 *pdata = pwm_chip_to_ti_sn_bridge(chip);
   1295	unsigned int pwm_en_inv;
   1296	unsigned int backlight;
   1297	unsigned int pre_div;
   1298	unsigned int scale;
   1299	u64 period_max;
   1300	u64 period;
   1301	int ret;
   1302
   1303	if (!pdata->pwm_enabled) {
   1304		ret = pm_runtime_get_sync(pdata->dev);
   1305		if (ret < 0) {
   1306			pm_runtime_put_sync(pdata->dev);
   1307			return ret;
   1308		}
   1309	}
   1310
   1311	if (state->enabled) {
   1312		if (!pdata->pwm_enabled) {
   1313			/*
   1314			 * The chip might have been powered down while we
   1315			 * didn't hold a PM runtime reference, so mux in the
   1316			 * PWM function on the GPIO pin again.
   1317			 */
   1318			ret = regmap_update_bits(pdata->regmap, SN_GPIO_CTRL_REG,
   1319						 SN_GPIO_MUX_MASK << (2 * SN_PWM_GPIO_IDX),
   1320						 SN_GPIO_MUX_SPECIAL << (2 * SN_PWM_GPIO_IDX));
   1321			if (ret) {
   1322				dev_err(pdata->dev, "failed to mux in PWM function\n");
   1323				goto out;
   1324			}
   1325		}
   1326
   1327		/*
   1328		 * Per the datasheet the PWM frequency is given by:
   1329		 *
   1330		 *                          REFCLK_FREQ
   1331		 *   PWM_FREQ = -----------------------------------
   1332		 *               PWM_PRE_DIV * BACKLIGHT_SCALE + 1
   1333		 *
   1334		 * However, after careful review the author is convinced that
   1335		 * the documentation has lost some parenthesis around
   1336		 * "BACKLIGHT_SCALE + 1".
   1337		 *
   1338		 * With the period T_pwm = 1/PWM_FREQ this can be written:
   1339		 *
   1340		 *   T_pwm * REFCLK_FREQ = PWM_PRE_DIV * (BACKLIGHT_SCALE + 1)
   1341		 *
   1342		 * In order to keep BACKLIGHT_SCALE within its 16 bits,
   1343		 * PWM_PRE_DIV must be:
   1344		 *
   1345		 *                     T_pwm * REFCLK_FREQ
   1346		 *   PWM_PRE_DIV >= -------------------------
   1347		 *                   BACKLIGHT_SCALE_MAX + 1
   1348		 *
   1349		 * To simplify the search and to favour higher resolution of
   1350		 * the duty cycle over accuracy of the period, the lowest
   1351		 * possible PWM_PRE_DIV is used. Finally the scale is
   1352		 * calculated as:
   1353		 *
   1354		 *                      T_pwm * REFCLK_FREQ
   1355		 *   BACKLIGHT_SCALE = ---------------------- - 1
   1356		 *                          PWM_PRE_DIV
   1357		 *
   1358		 * Here T_pwm is represented in seconds, so appropriate scaling
   1359		 * to nanoseconds is necessary.
   1360		 */
   1361
   1362		/* Minimum T_pwm is 1 / REFCLK_FREQ */
   1363		if (state->period <= NSEC_PER_SEC / pdata->pwm_refclk_freq) {
   1364			ret = -EINVAL;
   1365			goto out;
   1366		}
   1367
   1368		/*
   1369		 * Maximum T_pwm is 255 * (65535 + 1) / REFCLK_FREQ
   1370		 * Limit period to this to avoid overflows
   1371		 */
   1372		period_max = div_u64((u64)NSEC_PER_SEC * 255 * (65535 + 1),
   1373				     pdata->pwm_refclk_freq);
   1374		period = min(state->period, period_max);
   1375
   1376		pre_div = DIV64_U64_ROUND_UP(period * pdata->pwm_refclk_freq,
   1377					     (u64)NSEC_PER_SEC * (BACKLIGHT_SCALE_MAX + 1));
   1378		scale = div64_u64(period * pdata->pwm_refclk_freq, (u64)NSEC_PER_SEC * pre_div) - 1;
   1379
   1380		/*
   1381		 * The documentation has the duty ratio given as:
   1382		 *
   1383		 *     duty          BACKLIGHT
   1384		 *   ------- = ---------------------
   1385		 *    period    BACKLIGHT_SCALE + 1
   1386		 *
   1387		 * Solve for BACKLIGHT, substituting BACKLIGHT_SCALE according
   1388		 * to definition above and adjusting for nanosecond
   1389		 * representation of duty cycle gives us:
   1390		 */
   1391		backlight = div64_u64(state->duty_cycle * pdata->pwm_refclk_freq,
   1392				      (u64)NSEC_PER_SEC * pre_div);
   1393		if (backlight > scale)
   1394			backlight = scale;
   1395
   1396		ret = regmap_write(pdata->regmap, SN_PWM_PRE_DIV_REG, pre_div);
   1397		if (ret) {
   1398			dev_err(pdata->dev, "failed to update PWM_PRE_DIV\n");
   1399			goto out;
   1400		}
   1401
   1402		ti_sn65dsi86_write_u16(pdata, SN_BACKLIGHT_SCALE_REG, scale);
   1403		ti_sn65dsi86_write_u16(pdata, SN_BACKLIGHT_REG, backlight);
   1404	}
   1405
   1406	pwm_en_inv = FIELD_PREP(SN_PWM_EN_MASK, state->enabled) |
   1407		     FIELD_PREP(SN_PWM_INV_MASK, state->polarity == PWM_POLARITY_INVERSED);
   1408	ret = regmap_write(pdata->regmap, SN_PWM_EN_INV_REG, pwm_en_inv);
   1409	if (ret) {
   1410		dev_err(pdata->dev, "failed to update PWM_EN/PWM_INV\n");
   1411		goto out;
   1412	}
   1413
   1414	pdata->pwm_enabled = state->enabled;
   1415out:
   1416
   1417	if (!pdata->pwm_enabled)
   1418		pm_runtime_put_sync(pdata->dev);
   1419
   1420	return ret;
   1421}
   1422
   1423static void ti_sn_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
   1424				struct pwm_state *state)
   1425{
   1426	struct ti_sn65dsi86 *pdata = pwm_chip_to_ti_sn_bridge(chip);
   1427	unsigned int pwm_en_inv;
   1428	unsigned int pre_div;
   1429	u16 backlight;
   1430	u16 scale;
   1431	int ret;
   1432
   1433	ret = regmap_read(pdata->regmap, SN_PWM_EN_INV_REG, &pwm_en_inv);
   1434	if (ret)
   1435		return;
   1436
   1437	ret = ti_sn65dsi86_read_u16(pdata, SN_BACKLIGHT_SCALE_REG, &scale);
   1438	if (ret)
   1439		return;
   1440
   1441	ret = ti_sn65dsi86_read_u16(pdata, SN_BACKLIGHT_REG, &backlight);
   1442	if (ret)
   1443		return;
   1444
   1445	ret = regmap_read(pdata->regmap, SN_PWM_PRE_DIV_REG, &pre_div);
   1446	if (ret)
   1447		return;
   1448
   1449	state->enabled = FIELD_GET(SN_PWM_EN_MASK, pwm_en_inv);
   1450	if (FIELD_GET(SN_PWM_INV_MASK, pwm_en_inv))
   1451		state->polarity = PWM_POLARITY_INVERSED;
   1452	else
   1453		state->polarity = PWM_POLARITY_NORMAL;
   1454
   1455	state->period = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * pre_div * (scale + 1),
   1456					 pdata->pwm_refclk_freq);
   1457	state->duty_cycle = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * pre_div * backlight,
   1458					     pdata->pwm_refclk_freq);
   1459
   1460	if (state->duty_cycle > state->period)
   1461		state->duty_cycle = state->period;
   1462}
   1463
   1464static const struct pwm_ops ti_sn_pwm_ops = {
   1465	.request = ti_sn_pwm_request,
   1466	.free = ti_sn_pwm_free,
   1467	.apply = ti_sn_pwm_apply,
   1468	.get_state = ti_sn_pwm_get_state,
   1469	.owner = THIS_MODULE,
   1470};
   1471
   1472static int ti_sn_pwm_probe(struct auxiliary_device *adev,
   1473			   const struct auxiliary_device_id *id)
   1474{
   1475	struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent);
   1476
   1477	pdata->pchip.dev = pdata->dev;
   1478	pdata->pchip.ops = &ti_sn_pwm_ops;
   1479	pdata->pchip.npwm = 1;
   1480	pdata->pchip.of_xlate = of_pwm_single_xlate;
   1481	pdata->pchip.of_pwm_n_cells = 1;
   1482
   1483	return pwmchip_add(&pdata->pchip);
   1484}
   1485
   1486static void ti_sn_pwm_remove(struct auxiliary_device *adev)
   1487{
   1488	struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent);
   1489
   1490	pwmchip_remove(&pdata->pchip);
   1491
   1492	if (pdata->pwm_enabled)
   1493		pm_runtime_put_sync(pdata->dev);
   1494}
   1495
   1496static const struct auxiliary_device_id ti_sn_pwm_id_table[] = {
   1497	{ .name = "ti_sn65dsi86.pwm", },
   1498	{},
   1499};
   1500
   1501static struct auxiliary_driver ti_sn_pwm_driver = {
   1502	.name = "pwm",
   1503	.probe = ti_sn_pwm_probe,
   1504	.remove = ti_sn_pwm_remove,
   1505	.id_table = ti_sn_pwm_id_table,
   1506};
   1507
   1508static int __init ti_sn_pwm_register(void)
   1509{
   1510	return auxiliary_driver_register(&ti_sn_pwm_driver);
   1511}
   1512
   1513static void ti_sn_pwm_unregister(void)
   1514{
   1515	auxiliary_driver_unregister(&ti_sn_pwm_driver);
   1516}
   1517
   1518#else
   1519static inline int ti_sn_pwm_pin_request(struct ti_sn65dsi86 *pdata) { return 0; }
   1520static inline void ti_sn_pwm_pin_release(struct ti_sn65dsi86 *pdata) {}
   1521
   1522static inline int ti_sn_pwm_register(void) { return 0; }
   1523static inline void ti_sn_pwm_unregister(void) {}
   1524#endif
   1525
   1526/* -----------------------------------------------------------------------------
   1527 * GPIO Controller
   1528 */
   1529#if defined(CONFIG_OF_GPIO)
   1530
   1531static int tn_sn_bridge_of_xlate(struct gpio_chip *chip,
   1532				 const struct of_phandle_args *gpiospec,
   1533				 u32 *flags)
   1534{
   1535	if (WARN_ON(gpiospec->args_count < chip->of_gpio_n_cells))
   1536		return -EINVAL;
   1537
   1538	if (gpiospec->args[0] > chip->ngpio || gpiospec->args[0] < 1)
   1539		return -EINVAL;
   1540
   1541	if (flags)
   1542		*flags = gpiospec->args[1];
   1543
   1544	return gpiospec->args[0] - SN_GPIO_PHYSICAL_OFFSET;
   1545}
   1546
   1547static int ti_sn_bridge_gpio_get_direction(struct gpio_chip *chip,
   1548					   unsigned int offset)
   1549{
   1550	struct ti_sn65dsi86 *pdata = gpiochip_get_data(chip);
   1551
   1552	/*
   1553	 * We already have to keep track of the direction because we use
   1554	 * that to figure out whether we've powered the device.  We can
   1555	 * just return that rather than (maybe) powering up the device
   1556	 * to ask its direction.
   1557	 */
   1558	return test_bit(offset, pdata->gchip_output) ?
   1559		GPIO_LINE_DIRECTION_OUT : GPIO_LINE_DIRECTION_IN;
   1560}
   1561
   1562static int ti_sn_bridge_gpio_get(struct gpio_chip *chip, unsigned int offset)
   1563{
   1564	struct ti_sn65dsi86 *pdata = gpiochip_get_data(chip);
   1565	unsigned int val;
   1566	int ret;
   1567
   1568	/*
   1569	 * When the pin is an input we don't forcibly keep the bridge
   1570	 * powered--we just power it on to read the pin.  NOTE: part of
   1571	 * the reason this works is that the bridge defaults (when
   1572	 * powered back on) to all 4 GPIOs being configured as GPIO input.
   1573	 * Also note that if something else is keeping the chip powered the
   1574	 * pm_runtime functions are lightweight increments of a refcount.
   1575	 */
   1576	pm_runtime_get_sync(pdata->dev);
   1577	ret = regmap_read(pdata->regmap, SN_GPIO_IO_REG, &val);
   1578	pm_runtime_put_autosuspend(pdata->dev);
   1579
   1580	if (ret)
   1581		return ret;
   1582
   1583	return !!(val & BIT(SN_GPIO_INPUT_SHIFT + offset));
   1584}
   1585
   1586static void ti_sn_bridge_gpio_set(struct gpio_chip *chip, unsigned int offset,
   1587				  int val)
   1588{
   1589	struct ti_sn65dsi86 *pdata = gpiochip_get_data(chip);
   1590	int ret;
   1591
   1592	if (!test_bit(offset, pdata->gchip_output)) {
   1593		dev_err(pdata->dev, "Ignoring GPIO set while input\n");
   1594		return;
   1595	}
   1596
   1597	val &= 1;
   1598	ret = regmap_update_bits(pdata->regmap, SN_GPIO_IO_REG,
   1599				 BIT(SN_GPIO_OUTPUT_SHIFT + offset),
   1600				 val << (SN_GPIO_OUTPUT_SHIFT + offset));
   1601	if (ret)
   1602		dev_warn(pdata->dev,
   1603			 "Failed to set bridge GPIO %u: %d\n", offset, ret);
   1604}
   1605
   1606static int ti_sn_bridge_gpio_direction_input(struct gpio_chip *chip,
   1607					     unsigned int offset)
   1608{
   1609	struct ti_sn65dsi86 *pdata = gpiochip_get_data(chip);
   1610	int shift = offset * 2;
   1611	int ret;
   1612
   1613	if (!test_and_clear_bit(offset, pdata->gchip_output))
   1614		return 0;
   1615
   1616	ret = regmap_update_bits(pdata->regmap, SN_GPIO_CTRL_REG,
   1617				 SN_GPIO_MUX_MASK << shift,
   1618				 SN_GPIO_MUX_INPUT << shift);
   1619	if (ret) {
   1620		set_bit(offset, pdata->gchip_output);
   1621		return ret;
   1622	}
   1623
   1624	/*
   1625	 * NOTE: if nobody else is powering the device this may fully power
   1626	 * it off and when it comes back it will have lost all state, but
   1627	 * that's OK because the default is input and we're now an input.
   1628	 */
   1629	pm_runtime_put_autosuspend(pdata->dev);
   1630
   1631	return 0;
   1632}
   1633
   1634static int ti_sn_bridge_gpio_direction_output(struct gpio_chip *chip,
   1635					      unsigned int offset, int val)
   1636{
   1637	struct ti_sn65dsi86 *pdata = gpiochip_get_data(chip);
   1638	int shift = offset * 2;
   1639	int ret;
   1640
   1641	if (test_and_set_bit(offset, pdata->gchip_output))
   1642		return 0;
   1643
   1644	pm_runtime_get_sync(pdata->dev);
   1645
   1646	/* Set value first to avoid glitching */
   1647	ti_sn_bridge_gpio_set(chip, offset, val);
   1648
   1649	/* Set direction */
   1650	ret = regmap_update_bits(pdata->regmap, SN_GPIO_CTRL_REG,
   1651				 SN_GPIO_MUX_MASK << shift,
   1652				 SN_GPIO_MUX_OUTPUT << shift);
   1653	if (ret) {
   1654		clear_bit(offset, pdata->gchip_output);
   1655		pm_runtime_put_autosuspend(pdata->dev);
   1656	}
   1657
   1658	return ret;
   1659}
   1660
   1661static int ti_sn_bridge_gpio_request(struct gpio_chip *chip, unsigned int offset)
   1662{
   1663	struct ti_sn65dsi86 *pdata = gpiochip_get_data(chip);
   1664
   1665	if (offset == SN_PWM_GPIO_IDX)
   1666		return ti_sn_pwm_pin_request(pdata);
   1667
   1668	return 0;
   1669}
   1670
   1671static void ti_sn_bridge_gpio_free(struct gpio_chip *chip, unsigned int offset)
   1672{
   1673	struct ti_sn65dsi86 *pdata = gpiochip_get_data(chip);
   1674
   1675	/* We won't keep pm_runtime if we're input, so switch there on free */
   1676	ti_sn_bridge_gpio_direction_input(chip, offset);
   1677
   1678	if (offset == SN_PWM_GPIO_IDX)
   1679		ti_sn_pwm_pin_release(pdata);
   1680}
   1681
   1682static const char * const ti_sn_bridge_gpio_names[SN_NUM_GPIOS] = {
   1683	"GPIO1", "GPIO2", "GPIO3", "GPIO4"
   1684};
   1685
   1686static int ti_sn_gpio_probe(struct auxiliary_device *adev,
   1687			    const struct auxiliary_device_id *id)
   1688{
   1689	struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent);
   1690	int ret;
   1691
   1692	/* Only init if someone is going to use us as a GPIO controller */
   1693	if (!of_property_read_bool(pdata->dev->of_node, "gpio-controller"))
   1694		return 0;
   1695
   1696	pdata->gchip.label = dev_name(pdata->dev);
   1697	pdata->gchip.parent = pdata->dev;
   1698	pdata->gchip.owner = THIS_MODULE;
   1699	pdata->gchip.of_xlate = tn_sn_bridge_of_xlate;
   1700	pdata->gchip.of_gpio_n_cells = 2;
   1701	pdata->gchip.request = ti_sn_bridge_gpio_request;
   1702	pdata->gchip.free = ti_sn_bridge_gpio_free;
   1703	pdata->gchip.get_direction = ti_sn_bridge_gpio_get_direction;
   1704	pdata->gchip.direction_input = ti_sn_bridge_gpio_direction_input;
   1705	pdata->gchip.direction_output = ti_sn_bridge_gpio_direction_output;
   1706	pdata->gchip.get = ti_sn_bridge_gpio_get;
   1707	pdata->gchip.set = ti_sn_bridge_gpio_set;
   1708	pdata->gchip.can_sleep = true;
   1709	pdata->gchip.names = ti_sn_bridge_gpio_names;
   1710	pdata->gchip.ngpio = SN_NUM_GPIOS;
   1711	pdata->gchip.base = -1;
   1712	ret = devm_gpiochip_add_data(&adev->dev, &pdata->gchip, pdata);
   1713	if (ret)
   1714		dev_err(pdata->dev, "can't add gpio chip\n");
   1715
   1716	return ret;
   1717}
   1718
   1719static const struct auxiliary_device_id ti_sn_gpio_id_table[] = {
   1720	{ .name = "ti_sn65dsi86.gpio", },
   1721	{},
   1722};
   1723
   1724MODULE_DEVICE_TABLE(auxiliary, ti_sn_gpio_id_table);
   1725
   1726static struct auxiliary_driver ti_sn_gpio_driver = {
   1727	.name = "gpio",
   1728	.probe = ti_sn_gpio_probe,
   1729	.id_table = ti_sn_gpio_id_table,
   1730};
   1731
   1732static int __init ti_sn_gpio_register(void)
   1733{
   1734	return auxiliary_driver_register(&ti_sn_gpio_driver);
   1735}
   1736
   1737static void ti_sn_gpio_unregister(void)
   1738{
   1739	auxiliary_driver_unregister(&ti_sn_gpio_driver);
   1740}
   1741
   1742#else
   1743
   1744static inline int ti_sn_gpio_register(void) { return 0; }
   1745static inline void ti_sn_gpio_unregister(void) {}
   1746
   1747#endif
   1748
   1749/* -----------------------------------------------------------------------------
   1750 * Probe & Remove
   1751 */
   1752
   1753static void ti_sn65dsi86_runtime_disable(void *data)
   1754{
   1755	pm_runtime_dont_use_autosuspend(data);
   1756	pm_runtime_disable(data);
   1757}
   1758
   1759static int ti_sn65dsi86_parse_regulators(struct ti_sn65dsi86 *pdata)
   1760{
   1761	unsigned int i;
   1762	const char * const ti_sn_bridge_supply_names[] = {
   1763		"vcca", "vcc", "vccio", "vpll",
   1764	};
   1765
   1766	for (i = 0; i < SN_REGULATOR_SUPPLY_NUM; i++)
   1767		pdata->supplies[i].supply = ti_sn_bridge_supply_names[i];
   1768
   1769	return devm_regulator_bulk_get(pdata->dev, SN_REGULATOR_SUPPLY_NUM,
   1770				       pdata->supplies);
   1771}
   1772
   1773static int ti_sn65dsi86_probe(struct i2c_client *client,
   1774			      const struct i2c_device_id *id)
   1775{
   1776	struct device *dev = &client->dev;
   1777	struct ti_sn65dsi86 *pdata;
   1778	int ret;
   1779
   1780	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
   1781		DRM_ERROR("device doesn't support I2C\n");
   1782		return -ENODEV;
   1783	}
   1784
   1785	pdata = devm_kzalloc(dev, sizeof(struct ti_sn65dsi86), GFP_KERNEL);
   1786	if (!pdata)
   1787		return -ENOMEM;
   1788	dev_set_drvdata(dev, pdata);
   1789	pdata->dev = dev;
   1790
   1791	mutex_init(&pdata->comms_mutex);
   1792
   1793	pdata->regmap = devm_regmap_init_i2c(client,
   1794					     &ti_sn65dsi86_regmap_config);
   1795	if (IS_ERR(pdata->regmap))
   1796		return dev_err_probe(dev, PTR_ERR(pdata->regmap),
   1797				     "regmap i2c init failed\n");
   1798
   1799	pdata->enable_gpio = devm_gpiod_get_optional(dev, "enable",
   1800						     GPIOD_OUT_LOW);
   1801	if (IS_ERR(pdata->enable_gpio))
   1802		return dev_err_probe(dev, PTR_ERR(pdata->enable_gpio),
   1803				     "failed to get enable gpio from DT\n");
   1804
   1805	ret = ti_sn65dsi86_parse_regulators(pdata);
   1806	if (ret)
   1807		return dev_err_probe(dev, ret, "failed to parse regulators\n");
   1808
   1809	pdata->refclk = devm_clk_get_optional(dev, "refclk");
   1810	if (IS_ERR(pdata->refclk))
   1811		return dev_err_probe(dev, PTR_ERR(pdata->refclk),
   1812				     "failed to get reference clock\n");
   1813
   1814	pm_runtime_enable(dev);
   1815	pm_runtime_set_autosuspend_delay(pdata->dev, 500);
   1816	pm_runtime_use_autosuspend(pdata->dev);
   1817	ret = devm_add_action_or_reset(dev, ti_sn65dsi86_runtime_disable, dev);
   1818	if (ret)
   1819		return ret;
   1820
   1821	ti_sn65dsi86_debugfs_init(pdata);
   1822
   1823	/*
   1824	 * Break ourselves up into a collection of aux devices. The only real
   1825	 * motiviation here is to solve the chicken-and-egg problem of probe
   1826	 * ordering. The bridge wants the panel to be there when it probes.
   1827	 * The panel wants its HPD GPIO (provided by sn65dsi86 on some boards)
   1828	 * when it probes. The panel and maybe backlight might want the DDC
   1829	 * bus or the pwm_chip. Having sub-devices allows the some sub devices
   1830	 * to finish probing even if others return -EPROBE_DEFER and gets us
   1831	 * around the problems.
   1832	 */
   1833
   1834	if (IS_ENABLED(CONFIG_OF_GPIO)) {
   1835		ret = ti_sn65dsi86_add_aux_device(pdata, &pdata->gpio_aux, "gpio");
   1836		if (ret)
   1837			return ret;
   1838	}
   1839
   1840	if (IS_ENABLED(CONFIG_PWM)) {
   1841		ret = ti_sn65dsi86_add_aux_device(pdata, &pdata->pwm_aux, "pwm");
   1842		if (ret)
   1843			return ret;
   1844	}
   1845
   1846	/*
   1847	 * NOTE: At the end of the AUX channel probe we'll add the aux device
   1848	 * for the bridge. This is because the bridge can't be used until the
   1849	 * AUX channel is there and this is a very simple solution to the
   1850	 * dependency problem.
   1851	 */
   1852	return ti_sn65dsi86_add_aux_device(pdata, &pdata->aux_aux, "aux");
   1853}
   1854
   1855static struct i2c_device_id ti_sn65dsi86_id[] = {
   1856	{ "ti,sn65dsi86", 0},
   1857	{},
   1858};
   1859MODULE_DEVICE_TABLE(i2c, ti_sn65dsi86_id);
   1860
   1861static const struct of_device_id ti_sn65dsi86_match_table[] = {
   1862	{.compatible = "ti,sn65dsi86"},
   1863	{},
   1864};
   1865MODULE_DEVICE_TABLE(of, ti_sn65dsi86_match_table);
   1866
   1867static struct i2c_driver ti_sn65dsi86_driver = {
   1868	.driver = {
   1869		.name = "ti_sn65dsi86",
   1870		.of_match_table = ti_sn65dsi86_match_table,
   1871		.pm = &ti_sn65dsi86_pm_ops,
   1872	},
   1873	.probe = ti_sn65dsi86_probe,
   1874	.id_table = ti_sn65dsi86_id,
   1875};
   1876
   1877static int __init ti_sn65dsi86_init(void)
   1878{
   1879	int ret;
   1880
   1881	ret = i2c_add_driver(&ti_sn65dsi86_driver);
   1882	if (ret)
   1883		return ret;
   1884
   1885	ret = ti_sn_gpio_register();
   1886	if (ret)
   1887		goto err_main_was_registered;
   1888
   1889	ret = ti_sn_pwm_register();
   1890	if (ret)
   1891		goto err_gpio_was_registered;
   1892
   1893	ret = auxiliary_driver_register(&ti_sn_aux_driver);
   1894	if (ret)
   1895		goto err_pwm_was_registered;
   1896
   1897	ret = auxiliary_driver_register(&ti_sn_bridge_driver);
   1898	if (ret)
   1899		goto err_aux_was_registered;
   1900
   1901	return 0;
   1902
   1903err_aux_was_registered:
   1904	auxiliary_driver_unregister(&ti_sn_aux_driver);
   1905err_pwm_was_registered:
   1906	ti_sn_pwm_unregister();
   1907err_gpio_was_registered:
   1908	ti_sn_gpio_unregister();
   1909err_main_was_registered:
   1910	i2c_del_driver(&ti_sn65dsi86_driver);
   1911
   1912	return ret;
   1913}
   1914module_init(ti_sn65dsi86_init);
   1915
   1916static void __exit ti_sn65dsi86_exit(void)
   1917{
   1918	auxiliary_driver_unregister(&ti_sn_bridge_driver);
   1919	auxiliary_driver_unregister(&ti_sn_aux_driver);
   1920	ti_sn_pwm_unregister();
   1921	ti_sn_gpio_unregister();
   1922	i2c_del_driver(&ti_sn65dsi86_driver);
   1923}
   1924module_exit(ti_sn65dsi86_exit);
   1925
   1926MODULE_AUTHOR("Sandeep Panda <spanda@codeaurora.org>");
   1927MODULE_DESCRIPTION("sn65dsi86 DSI to eDP bridge driver");
   1928MODULE_LICENSE("GPL v2");