linux/drivers/gpu/drm/bridge/ti-sn65dsi86.c
<<
>>
Prefs
   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/auxiliary_bus.h>
   8#include <linux/bits.h>
   9#include <linux/clk.h>
  10#include <linux/debugfs.h>
  11#include <linux/gpio/consumer.h>
  12#include <linux/gpio/driver.h>
  13#include <linux/i2c.h>
  14#include <linux/iopoll.h>
  15#include <linux/module.h>
  16#include <linux/of_graph.h>
  17#include <linux/pm_runtime.h>
  18#include <linux/regmap.h>
  19#include <linux/regulator/consumer.h>
  20
  21#include <asm/unaligned.h>
  22
  23#include <drm/drm_atomic.h>
  24#include <drm/drm_atomic_helper.h>
  25#include <drm/drm_bridge.h>
  26#include <drm/drm_dp_helper.h>
  27#include <drm/drm_mipi_dsi.h>
  28#include <drm/drm_of.h>
  29#include <drm/drm_panel.h>
  30#include <drm/drm_print.h>
  31#include <drm/drm_probe_helper.h>
  32
  33#define SN_DEVICE_REV_REG                       0x08
  34#define SN_DPPLL_SRC_REG                        0x0A
  35#define  DPPLL_CLK_SRC_DSICLK                   BIT(0)
  36#define  REFCLK_FREQ_MASK                       GENMASK(3, 1)
  37#define  REFCLK_FREQ(x)                         ((x) << 1)
  38#define  DPPLL_SRC_DP_PLL_LOCK                  BIT(7)
  39#define SN_PLL_ENABLE_REG                       0x0D
  40#define SN_DSI_LANES_REG                        0x10
  41#define  CHA_DSI_LANES_MASK                     GENMASK(4, 3)
  42#define  CHA_DSI_LANES(x)                       ((x) << 3)
  43#define SN_DSIA_CLK_FREQ_REG                    0x12
  44#define SN_CHA_ACTIVE_LINE_LENGTH_LOW_REG       0x20
  45#define SN_CHA_VERTICAL_DISPLAY_SIZE_LOW_REG    0x24
  46#define SN_CHA_HSYNC_PULSE_WIDTH_LOW_REG        0x2C
  47#define SN_CHA_HSYNC_PULSE_WIDTH_HIGH_REG       0x2D
  48#define  CHA_HSYNC_POLARITY                     BIT(7)
  49#define SN_CHA_VSYNC_PULSE_WIDTH_LOW_REG        0x30
  50#define SN_CHA_VSYNC_PULSE_WIDTH_HIGH_REG       0x31
  51#define  CHA_VSYNC_POLARITY                     BIT(7)
  52#define SN_CHA_HORIZONTAL_BACK_PORCH_REG        0x34
  53#define SN_CHA_VERTICAL_BACK_PORCH_REG          0x36
  54#define SN_CHA_HORIZONTAL_FRONT_PORCH_REG       0x38
  55#define SN_CHA_VERTICAL_FRONT_PORCH_REG         0x3A
  56#define SN_LN_ASSIGN_REG                        0x59
  57#define  LN_ASSIGN_WIDTH                        2
  58#define SN_ENH_FRAME_REG                        0x5A
  59#define  VSTREAM_ENABLE                         BIT(3)
  60#define  LN_POLRS_OFFSET                        4
  61#define  LN_POLRS_MASK                          0xf0
  62#define SN_DATA_FORMAT_REG                      0x5B
  63#define  BPP_18_RGB                             BIT(0)
  64#define SN_HPD_DISABLE_REG                      0x5C
  65#define  HPD_DISABLE                            BIT(0)
  66#define SN_GPIO_IO_REG                          0x5E
  67#define  SN_GPIO_INPUT_SHIFT                    4
  68#define  SN_GPIO_OUTPUT_SHIFT                   0
  69#define SN_GPIO_CTRL_REG                        0x5F
  70#define  SN_GPIO_MUX_INPUT                      0
  71#define  SN_GPIO_MUX_OUTPUT                     1
  72#define  SN_GPIO_MUX_SPECIAL                    2
  73#define  SN_GPIO_MUX_MASK                       0x3
  74#define SN_AUX_WDATA_REG(x)                     (0x64 + (x))
  75#define SN_AUX_ADDR_19_16_REG                   0x74
  76#define SN_AUX_ADDR_15_8_REG                    0x75
  77#define SN_AUX_ADDR_7_0_REG                     0x76
  78#define SN_AUX_ADDR_MASK                        GENMASK(19, 0)
  79#define SN_AUX_LENGTH_REG                       0x77
  80#define SN_AUX_CMD_REG                          0x78
  81#define  AUX_CMD_SEND                           BIT(0)
  82#define  AUX_CMD_REQ(x)                         ((x) << 4)
  83#define SN_AUX_RDATA_REG(x)                     (0x79 + (x))
  84#define SN_SSC_CONFIG_REG                       0x93
  85#define  DP_NUM_LANES_MASK                      GENMASK(5, 4)
  86#define  DP_NUM_LANES(x)                        ((x) << 4)
  87#define SN_DATARATE_CONFIG_REG                  0x94
  88#define  DP_DATARATE_MASK                       GENMASK(7, 5)
  89#define  DP_DATARATE(x)                         ((x) << 5)
  90#define SN_ML_TX_MODE_REG                       0x96
  91#define  ML_TX_MAIN_LINK_OFF                    0
  92#define  ML_TX_NORMAL_MODE                      BIT(0)
  93#define SN_AUX_CMD_STATUS_REG                   0xF4
  94#define  AUX_IRQ_STATUS_AUX_RPLY_TOUT           BIT(3)
  95#define  AUX_IRQ_STATUS_AUX_SHORT               BIT(5)
  96#define  AUX_IRQ_STATUS_NAT_I2C_FAIL            BIT(6)
  97
  98#define MIN_DSI_CLK_FREQ_MHZ    40
  99
 100/* fudge factor required to account for 8b/10b encoding */
 101#define DP_CLK_FUDGE_NUM        10
 102#define DP_CLK_FUDGE_DEN        8
 103
 104/* Matches DP_AUX_MAX_PAYLOAD_BYTES (for now) */
 105#define SN_AUX_MAX_PAYLOAD_BYTES        16
 106
 107#define SN_REGULATOR_SUPPLY_NUM         4
 108
 109#define SN_MAX_DP_LANES                 4
 110#define SN_NUM_GPIOS                    4
 111#define SN_GPIO_PHYSICAL_OFFSET         1
 112
 113#define SN_LINK_TRAINING_TRIES          10
 114
 115/**
 116 * struct ti_sn65dsi86 - Platform data for ti-sn65dsi86 driver.
 117 * @bridge_aux:   AUX-bus sub device for MIPI-to-eDP bridge functionality.
 118 * @gpio_aux:     AUX-bus sub device for GPIO controller functionality.
 119 *
 120 * @dev:          Pointer to the top level (i2c) device.
 121 * @regmap:       Regmap for accessing i2c.
 122 * @aux:          Our aux channel.
 123 * @bridge:       Our bridge.
 124 * @connector:    Our connector.
 125 * @host_node:    Remote DSI node.
 126 * @dsi:          Our MIPI DSI source.
 127 * @edid:         Detected EDID of eDP panel.
 128 * @refclk:       Our reference clock.
 129 * @panel:        Our panel.
 130 * @enable_gpio:  The GPIO we toggle to enable the bridge.
 131 * @supplies:     Data for bulk enabling/disabling our regulators.
 132 * @dp_lanes:     Count of dp_lanes we're using.
 133 * @ln_assign:    Value to program to the LN_ASSIGN register.
 134 * @ln_polrs:     Value for the 4-bit LN_POLRS field of SN_ENH_FRAME_REG.
 135 * @comms_enabled: If true then communication over the aux channel is enabled.
 136 * @comms_mutex:   Protects modification of comms_enabled.
 137 *
 138 * @gchip:        If we expose our GPIOs, this is used.
 139 * @gchip_output: A cache of whether we've set GPIOs to output.  This
 140 *                serves double-duty of keeping track of the direction and
 141 *                also keeping track of whether we've incremented the
 142 *                pm_runtime reference count for this pin, which we do
 143 *                whenever a pin is configured as an output.  This is a
 144 *                bitmap so we can do atomic ops on it without an extra
 145 *                lock so concurrent users of our 4 GPIOs don't stomp on
 146 *                each other's read-modify-write.
 147 */
 148struct ti_sn65dsi86 {
 149        struct auxiliary_device         bridge_aux;
 150        struct auxiliary_device         gpio_aux;
 151
 152        struct device                   *dev;
 153        struct regmap                   *regmap;
 154        struct drm_dp_aux               aux;
 155        struct drm_bridge               bridge;
 156        struct drm_connector            connector;
 157        struct edid                     *edid;
 158        struct device_node              *host_node;
 159        struct mipi_dsi_device          *dsi;
 160        struct clk                      *refclk;
 161        struct drm_panel                *panel;
 162        struct gpio_desc                *enable_gpio;
 163        struct regulator_bulk_data      supplies[SN_REGULATOR_SUPPLY_NUM];
 164        int                             dp_lanes;
 165        u8                              ln_assign;
 166        u8                              ln_polrs;
 167        bool                            comms_enabled;
 168        struct mutex                    comms_mutex;
 169
 170#if defined(CONFIG_OF_GPIO)
 171        struct gpio_chip                gchip;
 172        DECLARE_BITMAP(gchip_output, SN_NUM_GPIOS);
 173#endif
 174};
 175
 176static const struct regmap_range ti_sn65dsi86_volatile_ranges[] = {
 177        { .range_min = 0, .range_max = 0xFF },
 178};
 179
 180static const struct regmap_access_table ti_sn_bridge_volatile_table = {
 181        .yes_ranges = ti_sn65dsi86_volatile_ranges,
 182        .n_yes_ranges = ARRAY_SIZE(ti_sn65dsi86_volatile_ranges),
 183};
 184
 185static const struct regmap_config ti_sn65dsi86_regmap_config = {
 186        .reg_bits = 8,
 187        .val_bits = 8,
 188        .volatile_table = &ti_sn_bridge_volatile_table,
 189        .cache_type = REGCACHE_NONE,
 190};
 191
 192static void ti_sn65dsi86_write_u16(struct ti_sn65dsi86 *pdata,
 193                                   unsigned int reg, u16 val)
 194{
 195        regmap_write(pdata->regmap, reg, val & 0xFF);
 196        regmap_write(pdata->regmap, reg + 1, val >> 8);
 197}
 198
 199static u32 ti_sn_bridge_get_dsi_freq(struct ti_sn65dsi86 *pdata)
 200{
 201        u32 bit_rate_khz, clk_freq_khz;
 202        struct drm_display_mode *mode =
 203                &pdata->bridge.encoder->crtc->state->adjusted_mode;
 204
 205        bit_rate_khz = mode->clock *
 206                        mipi_dsi_pixel_format_to_bpp(pdata->dsi->format);
 207        clk_freq_khz = bit_rate_khz / (pdata->dsi->lanes * 2);
 208
 209        return clk_freq_khz;
 210}
 211
 212/* clk frequencies supported by bridge in Hz in case derived from REFCLK pin */
 213static const u32 ti_sn_bridge_refclk_lut[] = {
 214        12000000,
 215        19200000,
 216        26000000,
 217        27000000,
 218        38400000,
 219};
 220
 221/* clk frequencies supported by bridge in Hz in case derived from DACP/N pin */
 222static const u32 ti_sn_bridge_dsiclk_lut[] = {
 223        468000000,
 224        384000000,
 225        416000000,
 226        486000000,
 227        460800000,
 228};
 229
 230static void ti_sn_bridge_set_refclk_freq(struct ti_sn65dsi86 *pdata)
 231{
 232        int i;
 233        u32 refclk_rate;
 234        const u32 *refclk_lut;
 235        size_t refclk_lut_size;
 236
 237        if (pdata->refclk) {
 238                refclk_rate = clk_get_rate(pdata->refclk);
 239                refclk_lut = ti_sn_bridge_refclk_lut;
 240                refclk_lut_size = ARRAY_SIZE(ti_sn_bridge_refclk_lut);
 241                clk_prepare_enable(pdata->refclk);
 242        } else {
 243                refclk_rate = ti_sn_bridge_get_dsi_freq(pdata) * 1000;
 244                refclk_lut = ti_sn_bridge_dsiclk_lut;
 245                refclk_lut_size = ARRAY_SIZE(ti_sn_bridge_dsiclk_lut);
 246        }
 247
 248        /* for i equals to refclk_lut_size means default frequency */
 249        for (i = 0; i < refclk_lut_size; i++)
 250                if (refclk_lut[i] == refclk_rate)
 251                        break;
 252
 253        regmap_update_bits(pdata->regmap, SN_DPPLL_SRC_REG, REFCLK_FREQ_MASK,
 254                           REFCLK_FREQ(i));
 255}
 256
 257static void ti_sn65dsi86_enable_comms(struct ti_sn65dsi86 *pdata)
 258{
 259        mutex_lock(&pdata->comms_mutex);
 260
 261        /* configure bridge ref_clk */
 262        ti_sn_bridge_set_refclk_freq(pdata);
 263
 264        /*
 265         * HPD on this bridge chip is a bit useless.  This is an eDP bridge
 266         * so the HPD is an internal signal that's only there to signal that
 267         * the panel is done powering up.  ...but the bridge chip debounces
 268         * this signal by between 100 ms and 400 ms (depending on process,
 269         * voltage, and temperate--I measured it at about 200 ms).  One
 270         * particular panel asserted HPD 84 ms after it was powered on meaning
 271         * that we saw HPD 284 ms after power on.  ...but the same panel said
 272         * that instead of looking at HPD you could just hardcode a delay of
 273         * 200 ms.  We'll assume that the panel driver will have the hardcoded
 274         * delay in its prepare and always disable HPD.
 275         *
 276         * If HPD somehow makes sense on some future panel we'll have to
 277         * change this to be conditional on someone specifying that HPD should
 278         * be used.
 279         */
 280        regmap_update_bits(pdata->regmap, SN_HPD_DISABLE_REG, HPD_DISABLE,
 281                           HPD_DISABLE);
 282
 283        pdata->comms_enabled = true;
 284
 285        mutex_unlock(&pdata->comms_mutex);
 286}
 287
 288static void ti_sn65dsi86_disable_comms(struct ti_sn65dsi86 *pdata)
 289{
 290        mutex_lock(&pdata->comms_mutex);
 291
 292        pdata->comms_enabled = false;
 293        clk_disable_unprepare(pdata->refclk);
 294
 295        mutex_unlock(&pdata->comms_mutex);
 296}
 297
 298static int __maybe_unused ti_sn65dsi86_resume(struct device *dev)
 299{
 300        struct ti_sn65dsi86 *pdata = dev_get_drvdata(dev);
 301        int ret;
 302
 303        ret = regulator_bulk_enable(SN_REGULATOR_SUPPLY_NUM, pdata->supplies);
 304        if (ret) {
 305                DRM_ERROR("failed to enable supplies %d\n", ret);
 306                return ret;
 307        }
 308
 309        gpiod_set_value(pdata->enable_gpio, 1);
 310
 311        /*
 312         * If we have a reference clock we can enable communication w/ the
 313         * panel (including the aux channel) w/out any need for an input clock
 314         * so we can do it in resume which lets us read the EDID before
 315         * pre_enable(). Without a reference clock we need the MIPI reference
 316         * clock so reading early doesn't work.
 317         */
 318        if (pdata->refclk)
 319                ti_sn65dsi86_enable_comms(pdata);
 320
 321        return ret;
 322}
 323
 324static int __maybe_unused ti_sn65dsi86_suspend(struct device *dev)
 325{
 326        struct ti_sn65dsi86 *pdata = dev_get_drvdata(dev);
 327        int ret;
 328
 329        if (pdata->refclk)
 330                ti_sn65dsi86_disable_comms(pdata);
 331
 332        gpiod_set_value(pdata->enable_gpio, 0);
 333
 334        ret = regulator_bulk_disable(SN_REGULATOR_SUPPLY_NUM, pdata->supplies);
 335        if (ret)
 336                DRM_ERROR("failed to disable supplies %d\n", ret);
 337
 338        return ret;
 339}
 340
 341static const struct dev_pm_ops ti_sn65dsi86_pm_ops = {
 342        SET_RUNTIME_PM_OPS(ti_sn65dsi86_suspend, ti_sn65dsi86_resume, NULL)
 343        SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
 344                                pm_runtime_force_resume)
 345};
 346
 347static int status_show(struct seq_file *s, void *data)
 348{
 349        struct ti_sn65dsi86 *pdata = s->private;
 350        unsigned int reg, val;
 351
 352        seq_puts(s, "STATUS REGISTERS:\n");
 353
 354        pm_runtime_get_sync(pdata->dev);
 355
 356        /* IRQ Status Registers, see Table 31 in datasheet */
 357        for (reg = 0xf0; reg <= 0xf8; reg++) {
 358                regmap_read(pdata->regmap, reg, &val);
 359                seq_printf(s, "[0x%02x] = 0x%08x\n", reg, val);
 360        }
 361
 362        pm_runtime_put_autosuspend(pdata->dev);
 363
 364        return 0;
 365}
 366
 367DEFINE_SHOW_ATTRIBUTE(status);
 368
 369static void ti_sn65dsi86_debugfs_remove(void *data)
 370{
 371        debugfs_remove_recursive(data);
 372}
 373
 374static void ti_sn65dsi86_debugfs_init(struct ti_sn65dsi86 *pdata)
 375{
 376        struct device *dev = pdata->dev;
 377        struct dentry *debugfs;
 378        int ret;
 379
 380        debugfs = debugfs_create_dir(dev_name(dev), NULL);
 381
 382        /*
 383         * We might get an error back if debugfs wasn't enabled in the kernel
 384         * so let's just silently return upon failure.
 385         */
 386        if (IS_ERR_OR_NULL(debugfs))
 387                return;
 388
 389        ret = devm_add_action_or_reset(dev, ti_sn65dsi86_debugfs_remove, debugfs);
 390        if (ret)
 391                return;
 392
 393        debugfs_create_file("status", 0600, debugfs, pdata, &status_fops);
 394}
 395
 396/* Connector funcs */
 397static struct ti_sn65dsi86 *
 398connector_to_ti_sn65dsi86(struct drm_connector *connector)
 399{
 400        return container_of(connector, struct ti_sn65dsi86, connector);
 401}
 402
 403static int ti_sn_bridge_connector_get_modes(struct drm_connector *connector)
 404{
 405        struct ti_sn65dsi86 *pdata = connector_to_ti_sn65dsi86(connector);
 406        struct edid *edid = pdata->edid;
 407        int num, ret;
 408
 409        if (!edid) {
 410                pm_runtime_get_sync(pdata->dev);
 411                edid = pdata->edid = drm_get_edid(connector, &pdata->aux.ddc);
 412                pm_runtime_put_autosuspend(pdata->dev);
 413        }
 414
 415        if (edid && drm_edid_is_valid(edid)) {
 416                ret = drm_connector_update_edid_property(connector, edid);
 417                if (!ret) {
 418                        num = drm_add_edid_modes(connector, edid);
 419                        if (num)
 420                                return num;
 421                }
 422        }
 423
 424        return drm_panel_get_modes(pdata->panel, connector);
 425}
 426
 427static enum drm_mode_status
 428ti_sn_bridge_connector_mode_valid(struct drm_connector *connector,
 429                                  struct drm_display_mode *mode)
 430{
 431        /* maximum supported resolution is 4K at 60 fps */
 432        if (mode->clock > 594000)
 433                return MODE_CLOCK_HIGH;
 434
 435        return MODE_OK;
 436}
 437
 438static struct drm_connector_helper_funcs ti_sn_bridge_connector_helper_funcs = {
 439        .get_modes = ti_sn_bridge_connector_get_modes,
 440        .mode_valid = ti_sn_bridge_connector_mode_valid,
 441};
 442
 443static const struct drm_connector_funcs ti_sn_bridge_connector_funcs = {
 444        .fill_modes = drm_helper_probe_single_connector_modes,
 445        .destroy = drm_connector_cleanup,
 446        .reset = drm_atomic_helper_connector_reset,
 447        .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
 448        .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
 449};
 450
 451static struct ti_sn65dsi86 *bridge_to_ti_sn65dsi86(struct drm_bridge *bridge)
 452{
 453        return container_of(bridge, struct ti_sn65dsi86, bridge);
 454}
 455
 456static int ti_sn65dsi86_parse_regulators(struct ti_sn65dsi86 *pdata)
 457{
 458        unsigned int i;
 459        const char * const ti_sn_bridge_supply_names[] = {
 460                "vcca", "vcc", "vccio", "vpll",
 461        };
 462
 463        for (i = 0; i < SN_REGULATOR_SUPPLY_NUM; i++)
 464                pdata->supplies[i].supply = ti_sn_bridge_supply_names[i];
 465
 466        return devm_regulator_bulk_get(pdata->dev, SN_REGULATOR_SUPPLY_NUM,
 467                                       pdata->supplies);
 468}
 469
 470static int ti_sn_bridge_attach(struct drm_bridge *bridge,
 471                               enum drm_bridge_attach_flags flags)
 472{
 473        int ret, val;
 474        struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge);
 475        struct mipi_dsi_host *host;
 476        struct mipi_dsi_device *dsi;
 477        const struct mipi_dsi_device_info info = { .type = "ti_sn_bridge",
 478                                                   .channel = 0,
 479                                                   .node = NULL,
 480                                                 };
 481
 482        if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) {
 483                DRM_ERROR("Fix bridge driver to make connector optional!");
 484                return -EINVAL;
 485        }
 486
 487        pdata->aux.drm_dev = bridge->dev;
 488        ret = drm_dp_aux_register(&pdata->aux);
 489        if (ret < 0) {
 490                drm_err(bridge->dev, "Failed to register DP AUX channel: %d\n", ret);
 491                return ret;
 492        }
 493
 494        ret = drm_connector_init(bridge->dev, &pdata->connector,
 495                                 &ti_sn_bridge_connector_funcs,
 496                                 DRM_MODE_CONNECTOR_eDP);
 497        if (ret) {
 498                DRM_ERROR("Failed to initialize connector with drm\n");
 499                goto err_conn_init;
 500        }
 501
 502        drm_connector_helper_add(&pdata->connector,
 503                                 &ti_sn_bridge_connector_helper_funcs);
 504        drm_connector_attach_encoder(&pdata->connector, bridge->encoder);
 505
 506        /*
 507         * TODO: ideally finding host resource and dsi dev registration needs
 508         * to be done in bridge probe. But some existing DSI host drivers will
 509         * wait for any of the drm_bridge/drm_panel to get added to the global
 510         * bridge/panel list, before completing their probe. So if we do the
 511         * dsi dev registration part in bridge probe, before populating in
 512         * the global bridge list, then it will cause deadlock as dsi host probe
 513         * will never complete, neither our bridge probe. So keeping it here
 514         * will satisfy most of the existing host drivers. Once the host driver
 515         * is fixed we can move the below code to bridge probe safely.
 516         */
 517        host = of_find_mipi_dsi_host_by_node(pdata->host_node);
 518        if (!host) {
 519                DRM_ERROR("failed to find dsi host\n");
 520                ret = -ENODEV;
 521                goto err_dsi_host;
 522        }
 523
 524        dsi = mipi_dsi_device_register_full(host, &info);
 525        if (IS_ERR(dsi)) {
 526                DRM_ERROR("failed to create dsi device\n");
 527                ret = PTR_ERR(dsi);
 528                goto err_dsi_host;
 529        }
 530
 531        /* TODO: setting to 4 MIPI lanes always for now */
 532        dsi->lanes = 4;
 533        dsi->format = MIPI_DSI_FMT_RGB888;
 534        dsi->mode_flags = MIPI_DSI_MODE_VIDEO;
 535
 536        /* check if continuous dsi clock is required or not */
 537        pm_runtime_get_sync(pdata->dev);
 538        regmap_read(pdata->regmap, SN_DPPLL_SRC_REG, &val);
 539        pm_runtime_put_autosuspend(pdata->dev);
 540        if (!(val & DPPLL_CLK_SRC_DSICLK))
 541                dsi->mode_flags |= MIPI_DSI_CLOCK_NON_CONTINUOUS;
 542
 543        ret = mipi_dsi_attach(dsi);
 544        if (ret < 0) {
 545                DRM_ERROR("failed to attach dsi to host\n");
 546                goto err_dsi_attach;
 547        }
 548        pdata->dsi = dsi;
 549
 550        return 0;
 551
 552err_dsi_attach:
 553        mipi_dsi_device_unregister(dsi);
 554err_dsi_host:
 555        drm_connector_cleanup(&pdata->connector);
 556err_conn_init:
 557        drm_dp_aux_unregister(&pdata->aux);
 558        return ret;
 559}
 560
 561static void ti_sn_bridge_detach(struct drm_bridge *bridge)
 562{
 563        drm_dp_aux_unregister(&bridge_to_ti_sn65dsi86(bridge)->aux);
 564}
 565
 566static void ti_sn_bridge_disable(struct drm_bridge *bridge)
 567{
 568        struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge);
 569
 570        drm_panel_disable(pdata->panel);
 571
 572        /* disable video stream */
 573        regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, VSTREAM_ENABLE, 0);
 574        /* semi auto link training mode OFF */
 575        regmap_write(pdata->regmap, SN_ML_TX_MODE_REG, 0);
 576        /* disable DP PLL */
 577        regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 0);
 578}
 579
 580static void ti_sn_bridge_set_dsi_rate(struct ti_sn65dsi86 *pdata)
 581{
 582        unsigned int bit_rate_mhz, clk_freq_mhz;
 583        unsigned int val;
 584        struct drm_display_mode *mode =
 585                &pdata->bridge.encoder->crtc->state->adjusted_mode;
 586
 587        /* set DSIA clk frequency */
 588        bit_rate_mhz = (mode->clock / 1000) *
 589                        mipi_dsi_pixel_format_to_bpp(pdata->dsi->format);
 590        clk_freq_mhz = bit_rate_mhz / (pdata->dsi->lanes * 2);
 591
 592        /* for each increment in val, frequency increases by 5MHz */
 593        val = (MIN_DSI_CLK_FREQ_MHZ / 5) +
 594                (((clk_freq_mhz - MIN_DSI_CLK_FREQ_MHZ) / 5) & 0xFF);
 595        regmap_write(pdata->regmap, SN_DSIA_CLK_FREQ_REG, val);
 596}
 597
 598static unsigned int ti_sn_bridge_get_bpp(struct ti_sn65dsi86 *pdata)
 599{
 600        if (pdata->connector.display_info.bpc <= 6)
 601                return 18;
 602        else
 603                return 24;
 604}
 605
 606/*
 607 * LUT index corresponds to register value and
 608 * LUT values corresponds to dp data rate supported
 609 * by the bridge in Mbps unit.
 610 */
 611static const unsigned int ti_sn_bridge_dp_rate_lut[] = {
 612        0, 1620, 2160, 2430, 2700, 3240, 4320, 5400
 613};
 614
 615static int ti_sn_bridge_calc_min_dp_rate_idx(struct ti_sn65dsi86 *pdata)
 616{
 617        unsigned int bit_rate_khz, dp_rate_mhz;
 618        unsigned int i;
 619        struct drm_display_mode *mode =
 620                &pdata->bridge.encoder->crtc->state->adjusted_mode;
 621
 622        /* Calculate minimum bit rate based on our pixel clock. */
 623        bit_rate_khz = mode->clock * ti_sn_bridge_get_bpp(pdata);
 624
 625        /* Calculate minimum DP data rate, taking 80% as per DP spec */
 626        dp_rate_mhz = DIV_ROUND_UP(bit_rate_khz * DP_CLK_FUDGE_NUM,
 627                                   1000 * pdata->dp_lanes * DP_CLK_FUDGE_DEN);
 628
 629        for (i = 1; i < ARRAY_SIZE(ti_sn_bridge_dp_rate_lut) - 1; i++)
 630                if (ti_sn_bridge_dp_rate_lut[i] >= dp_rate_mhz)
 631                        break;
 632
 633        return i;
 634}
 635
 636static void ti_sn_bridge_read_valid_rates(struct ti_sn65dsi86 *pdata,
 637                                          bool rate_valid[])
 638{
 639        unsigned int rate_per_200khz;
 640        unsigned int rate_mhz;
 641        u8 dpcd_val;
 642        int ret;
 643        int i, j;
 644
 645        ret = drm_dp_dpcd_readb(&pdata->aux, DP_EDP_DPCD_REV, &dpcd_val);
 646        if (ret != 1) {
 647                DRM_DEV_ERROR(pdata->dev,
 648                              "Can't read eDP rev (%d), assuming 1.1\n", ret);
 649                dpcd_val = DP_EDP_11;
 650        }
 651
 652        if (dpcd_val >= DP_EDP_14) {
 653                /* eDP 1.4 devices must provide a custom table */
 654                __le16 sink_rates[DP_MAX_SUPPORTED_RATES];
 655
 656                ret = drm_dp_dpcd_read(&pdata->aux, DP_SUPPORTED_LINK_RATES,
 657                                       sink_rates, sizeof(sink_rates));
 658
 659                if (ret != sizeof(sink_rates)) {
 660                        DRM_DEV_ERROR(pdata->dev,
 661                                "Can't read supported rate table (%d)\n", ret);
 662
 663                        /* By zeroing we'll fall back to DP_MAX_LINK_RATE. */
 664                        memset(sink_rates, 0, sizeof(sink_rates));
 665                }
 666
 667                for (i = 0; i < ARRAY_SIZE(sink_rates); i++) {
 668                        rate_per_200khz = le16_to_cpu(sink_rates[i]);
 669
 670                        if (!rate_per_200khz)
 671                                break;
 672
 673                        rate_mhz = rate_per_200khz * 200 / 1000;
 674                        for (j = 0;
 675                             j < ARRAY_SIZE(ti_sn_bridge_dp_rate_lut);
 676                             j++) {
 677                                if (ti_sn_bridge_dp_rate_lut[j] == rate_mhz)
 678                                        rate_valid[j] = true;
 679                        }
 680                }
 681
 682                for (i = 0; i < ARRAY_SIZE(ti_sn_bridge_dp_rate_lut); i++) {
 683                        if (rate_valid[i])
 684                                return;
 685                }
 686                DRM_DEV_ERROR(pdata->dev,
 687                              "No matching eDP rates in table; falling back\n");
 688        }
 689
 690        /* On older versions best we can do is use DP_MAX_LINK_RATE */
 691        ret = drm_dp_dpcd_readb(&pdata->aux, DP_MAX_LINK_RATE, &dpcd_val);
 692        if (ret != 1) {
 693                DRM_DEV_ERROR(pdata->dev,
 694                              "Can't read max rate (%d); assuming 5.4 GHz\n",
 695                              ret);
 696                dpcd_val = DP_LINK_BW_5_4;
 697        }
 698
 699        switch (dpcd_val) {
 700        default:
 701                DRM_DEV_ERROR(pdata->dev,
 702                              "Unexpected max rate (%#x); assuming 5.4 GHz\n",
 703                              (int)dpcd_val);
 704                fallthrough;
 705        case DP_LINK_BW_5_4:
 706                rate_valid[7] = 1;
 707                fallthrough;
 708        case DP_LINK_BW_2_7:
 709                rate_valid[4] = 1;
 710                fallthrough;
 711        case DP_LINK_BW_1_62:
 712                rate_valid[1] = 1;
 713                break;
 714        }
 715}
 716
 717static void ti_sn_bridge_set_video_timings(struct ti_sn65dsi86 *pdata)
 718{
 719        struct drm_display_mode *mode =
 720                &pdata->bridge.encoder->crtc->state->adjusted_mode;
 721        u8 hsync_polarity = 0, vsync_polarity = 0;
 722
 723        if (mode->flags & DRM_MODE_FLAG_PHSYNC)
 724                hsync_polarity = CHA_HSYNC_POLARITY;
 725        if (mode->flags & DRM_MODE_FLAG_PVSYNC)
 726                vsync_polarity = CHA_VSYNC_POLARITY;
 727
 728        ti_sn65dsi86_write_u16(pdata, SN_CHA_ACTIVE_LINE_LENGTH_LOW_REG,
 729                               mode->hdisplay);
 730        ti_sn65dsi86_write_u16(pdata, SN_CHA_VERTICAL_DISPLAY_SIZE_LOW_REG,
 731                               mode->vdisplay);
 732        regmap_write(pdata->regmap, SN_CHA_HSYNC_PULSE_WIDTH_LOW_REG,
 733                     (mode->hsync_end - mode->hsync_start) & 0xFF);
 734        regmap_write(pdata->regmap, SN_CHA_HSYNC_PULSE_WIDTH_HIGH_REG,
 735                     (((mode->hsync_end - mode->hsync_start) >> 8) & 0x7F) |
 736                     hsync_polarity);
 737        regmap_write(pdata->regmap, SN_CHA_VSYNC_PULSE_WIDTH_LOW_REG,
 738                     (mode->vsync_end - mode->vsync_start) & 0xFF);
 739        regmap_write(pdata->regmap, SN_CHA_VSYNC_PULSE_WIDTH_HIGH_REG,
 740                     (((mode->vsync_end - mode->vsync_start) >> 8) & 0x7F) |
 741                     vsync_polarity);
 742
 743        regmap_write(pdata->regmap, SN_CHA_HORIZONTAL_BACK_PORCH_REG,
 744                     (mode->htotal - mode->hsync_end) & 0xFF);
 745        regmap_write(pdata->regmap, SN_CHA_VERTICAL_BACK_PORCH_REG,
 746                     (mode->vtotal - mode->vsync_end) & 0xFF);
 747
 748        regmap_write(pdata->regmap, SN_CHA_HORIZONTAL_FRONT_PORCH_REG,
 749                     (mode->hsync_start - mode->hdisplay) & 0xFF);
 750        regmap_write(pdata->regmap, SN_CHA_VERTICAL_FRONT_PORCH_REG,
 751                     (mode->vsync_start - mode->vdisplay) & 0xFF);
 752
 753        usleep_range(10000, 10500); /* 10ms delay recommended by spec */
 754}
 755
 756static unsigned int ti_sn_get_max_lanes(struct ti_sn65dsi86 *pdata)
 757{
 758        u8 data;
 759        int ret;
 760
 761        ret = drm_dp_dpcd_readb(&pdata->aux, DP_MAX_LANE_COUNT, &data);
 762        if (ret != 1) {
 763                DRM_DEV_ERROR(pdata->dev,
 764                              "Can't read lane count (%d); assuming 4\n", ret);
 765                return 4;
 766        }
 767
 768        return data & DP_LANE_COUNT_MASK;
 769}
 770
 771static int ti_sn_link_training(struct ti_sn65dsi86 *pdata, int dp_rate_idx,
 772                               const char **last_err_str)
 773{
 774        unsigned int val;
 775        int ret;
 776        int i;
 777
 778        /* set dp clk frequency value */
 779        regmap_update_bits(pdata->regmap, SN_DATARATE_CONFIG_REG,
 780                           DP_DATARATE_MASK, DP_DATARATE(dp_rate_idx));
 781
 782        /* enable DP PLL */
 783        regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 1);
 784
 785        ret = regmap_read_poll_timeout(pdata->regmap, SN_DPPLL_SRC_REG, val,
 786                                       val & DPPLL_SRC_DP_PLL_LOCK, 1000,
 787                                       50 * 1000);
 788        if (ret) {
 789                *last_err_str = "DP_PLL_LOCK polling failed";
 790                goto exit;
 791        }
 792
 793        /*
 794         * We'll try to link train several times.  As part of link training
 795         * the bridge chip will write DP_SET_POWER_D0 to DP_SET_POWER.  If
 796         * the panel isn't ready quite it might respond NAK here which means
 797         * we need to try again.
 798         */
 799        for (i = 0; i < SN_LINK_TRAINING_TRIES; i++) {
 800                /* Semi auto link training mode */
 801                regmap_write(pdata->regmap, SN_ML_TX_MODE_REG, 0x0A);
 802                ret = regmap_read_poll_timeout(pdata->regmap, SN_ML_TX_MODE_REG, val,
 803                                               val == ML_TX_MAIN_LINK_OFF ||
 804                                               val == ML_TX_NORMAL_MODE, 1000,
 805                                               500 * 1000);
 806                if (ret) {
 807                        *last_err_str = "Training complete polling failed";
 808                } else if (val == ML_TX_MAIN_LINK_OFF) {
 809                        *last_err_str = "Link training failed, link is off";
 810                        ret = -EIO;
 811                        continue;
 812                }
 813
 814                break;
 815        }
 816
 817        /* If we saw quite a few retries, add a note about it */
 818        if (!ret && i > SN_LINK_TRAINING_TRIES / 2)
 819                DRM_DEV_INFO(pdata->dev, "Link training needed %d retries\n", i);
 820
 821exit:
 822        /* Disable the PLL if we failed */
 823        if (ret)
 824                regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 0);
 825
 826        return ret;
 827}
 828
 829static void ti_sn_bridge_enable(struct drm_bridge *bridge)
 830{
 831        struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge);
 832        bool rate_valid[ARRAY_SIZE(ti_sn_bridge_dp_rate_lut)] = { };
 833        const char *last_err_str = "No supported DP rate";
 834        int dp_rate_idx;
 835        unsigned int val;
 836        int ret = -EINVAL;
 837        int max_dp_lanes;
 838
 839        max_dp_lanes = ti_sn_get_max_lanes(pdata);
 840        pdata->dp_lanes = min(pdata->dp_lanes, max_dp_lanes);
 841
 842        /* DSI_A lane config */
 843        val = CHA_DSI_LANES(SN_MAX_DP_LANES - pdata->dsi->lanes);
 844        regmap_update_bits(pdata->regmap, SN_DSI_LANES_REG,
 845                           CHA_DSI_LANES_MASK, val);
 846
 847        regmap_write(pdata->regmap, SN_LN_ASSIGN_REG, pdata->ln_assign);
 848        regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, LN_POLRS_MASK,
 849                           pdata->ln_polrs << LN_POLRS_OFFSET);
 850
 851        /* set dsi clk frequency value */
 852        ti_sn_bridge_set_dsi_rate(pdata);
 853
 854        /*
 855         * The SN65DSI86 only supports ASSR Display Authentication method and
 856         * this method is enabled by default. An eDP panel must support this
 857         * authentication method. We need to enable this method in the eDP panel
 858         * at DisplayPort address 0x0010A prior to link training.
 859         */
 860        drm_dp_dpcd_writeb(&pdata->aux, DP_EDP_CONFIGURATION_SET,
 861                           DP_ALTERNATE_SCRAMBLER_RESET_ENABLE);
 862
 863        /* Set the DP output format (18 bpp or 24 bpp) */
 864        val = (ti_sn_bridge_get_bpp(pdata) == 18) ? BPP_18_RGB : 0;
 865        regmap_update_bits(pdata->regmap, SN_DATA_FORMAT_REG, BPP_18_RGB, val);
 866
 867        /* DP lane config */
 868        val = DP_NUM_LANES(min(pdata->dp_lanes, 3));
 869        regmap_update_bits(pdata->regmap, SN_SSC_CONFIG_REG, DP_NUM_LANES_MASK,
 870                           val);
 871
 872        ti_sn_bridge_read_valid_rates(pdata, rate_valid);
 873
 874        /* Train until we run out of rates */
 875        for (dp_rate_idx = ti_sn_bridge_calc_min_dp_rate_idx(pdata);
 876             dp_rate_idx < ARRAY_SIZE(ti_sn_bridge_dp_rate_lut);
 877             dp_rate_idx++) {
 878                if (!rate_valid[dp_rate_idx])
 879                        continue;
 880
 881                ret = ti_sn_link_training(pdata, dp_rate_idx, &last_err_str);
 882                if (!ret)
 883                        break;
 884        }
 885        if (ret) {
 886                DRM_DEV_ERROR(pdata->dev, "%s (%d)\n", last_err_str, ret);
 887                return;
 888        }
 889
 890        /* config video parameters */
 891        ti_sn_bridge_set_video_timings(pdata);
 892
 893        /* enable video stream */
 894        regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, VSTREAM_ENABLE,
 895                           VSTREAM_ENABLE);
 896
 897        drm_panel_enable(pdata->panel);
 898}
 899
 900static void ti_sn_bridge_pre_enable(struct drm_bridge *bridge)
 901{
 902        struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge);
 903
 904        pm_runtime_get_sync(pdata->dev);
 905
 906        if (!pdata->refclk)
 907                ti_sn65dsi86_enable_comms(pdata);
 908
 909        drm_panel_prepare(pdata->panel);
 910}
 911
 912static void ti_sn_bridge_post_disable(struct drm_bridge *bridge)
 913{
 914        struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge);
 915
 916        drm_panel_unprepare(pdata->panel);
 917
 918        if (!pdata->refclk)
 919                ti_sn65dsi86_disable_comms(pdata);
 920
 921        pm_runtime_put_sync(pdata->dev);
 922}
 923
 924static const struct drm_bridge_funcs ti_sn_bridge_funcs = {
 925        .attach = ti_sn_bridge_attach,
 926        .detach = ti_sn_bridge_detach,
 927        .pre_enable = ti_sn_bridge_pre_enable,
 928        .enable = ti_sn_bridge_enable,
 929        .disable = ti_sn_bridge_disable,
 930        .post_disable = ti_sn_bridge_post_disable,
 931};
 932
 933static struct ti_sn65dsi86 *aux_to_ti_sn65dsi86(struct drm_dp_aux *aux)
 934{
 935        return container_of(aux, struct ti_sn65dsi86, aux);
 936}
 937
 938static ssize_t ti_sn_aux_transfer(struct drm_dp_aux *aux,
 939                                  struct drm_dp_aux_msg *msg)
 940{
 941        struct ti_sn65dsi86 *pdata = aux_to_ti_sn65dsi86(aux);
 942        u32 request = msg->request & ~(DP_AUX_I2C_MOT | DP_AUX_I2C_WRITE_STATUS_UPDATE);
 943        u32 request_val = AUX_CMD_REQ(msg->request);
 944        u8 *buf = msg->buffer;
 945        unsigned int len = msg->size;
 946        unsigned int val;
 947        int ret;
 948        u8 addr_len[SN_AUX_LENGTH_REG + 1 - SN_AUX_ADDR_19_16_REG];
 949
 950        if (len > SN_AUX_MAX_PAYLOAD_BYTES)
 951                return -EINVAL;
 952
 953        pm_runtime_get_sync(pdata->dev);
 954        mutex_lock(&pdata->comms_mutex);
 955
 956        /*
 957         * If someone tries to do a DDC over AUX transaction before pre_enable()
 958         * on a device without a dedicated reference clock then we just can't
 959         * do it. Fail right away. This prevents non-refclk users from reading
 960         * the EDID before enabling the panel but such is life.
 961         */
 962        if (!pdata->comms_enabled) {
 963                ret = -EIO;
 964                goto exit;
 965        }
 966
 967        switch (request) {
 968        case DP_AUX_NATIVE_WRITE:
 969        case DP_AUX_I2C_WRITE:
 970        case DP_AUX_NATIVE_READ:
 971        case DP_AUX_I2C_READ:
 972                regmap_write(pdata->regmap, SN_AUX_CMD_REG, request_val);
 973                /* Assume it's good */
 974                msg->reply = 0;
 975                break;
 976        default:
 977                ret = -EINVAL;
 978                goto exit;
 979        }
 980
 981        BUILD_BUG_ON(sizeof(addr_len) != sizeof(__be32));
 982        put_unaligned_be32((msg->address & SN_AUX_ADDR_MASK) << 8 | len,
 983                           addr_len);
 984        regmap_bulk_write(pdata->regmap, SN_AUX_ADDR_19_16_REG, addr_len,
 985                          ARRAY_SIZE(addr_len));
 986
 987        if (request == DP_AUX_NATIVE_WRITE || request == DP_AUX_I2C_WRITE)
 988                regmap_bulk_write(pdata->regmap, SN_AUX_WDATA_REG(0), buf, len);
 989
 990        /* Clear old status bits before start so we don't get confused */
 991        regmap_write(pdata->regmap, SN_AUX_CMD_STATUS_REG,
 992                     AUX_IRQ_STATUS_NAT_I2C_FAIL |
 993                     AUX_IRQ_STATUS_AUX_RPLY_TOUT |
 994                     AUX_IRQ_STATUS_AUX_SHORT);
 995
 996        regmap_write(pdata->regmap, SN_AUX_CMD_REG, request_val | AUX_CMD_SEND);
 997
 998        /* Zero delay loop because i2c transactions are slow already */
 999        ret = regmap_read_poll_timeout(pdata->regmap, SN_AUX_CMD_REG, val,
1000                                       !(val & AUX_CMD_SEND), 0, 50 * 1000);
1001        if (ret)
1002                goto exit;
1003
1004        ret = regmap_read(pdata->regmap, SN_AUX_CMD_STATUS_REG, &val);
1005        if (ret)
1006                goto exit;
1007
1008        if (val & AUX_IRQ_STATUS_AUX_RPLY_TOUT) {
1009                /*
1010                 * The hardware tried the message seven times per the DP spec
1011                 * but it hit a timeout. We ignore defers here because they're
1012                 * handled in hardware.
1013                 */
1014                ret = -ETIMEDOUT;
1015                goto exit;
1016        }
1017
1018        if (val & AUX_IRQ_STATUS_AUX_SHORT) {
1019                ret = regmap_read(pdata->regmap, SN_AUX_LENGTH_REG, &len);
1020                if (ret)
1021                        goto exit;
1022        } else if (val & AUX_IRQ_STATUS_NAT_I2C_FAIL) {
1023                switch (request) {
1024                case DP_AUX_I2C_WRITE:
1025                case DP_AUX_I2C_READ:
1026                        msg->reply |= DP_AUX_I2C_REPLY_NACK;
1027                        break;
1028                case DP_AUX_NATIVE_READ:
1029                case DP_AUX_NATIVE_WRITE:
1030                        msg->reply |= DP_AUX_NATIVE_REPLY_NACK;
1031                        break;
1032                }
1033                len = 0;
1034                goto exit;
1035        }
1036
1037        if (request != DP_AUX_NATIVE_WRITE && request != DP_AUX_I2C_WRITE && len != 0)
1038                ret = regmap_bulk_read(pdata->regmap, SN_AUX_RDATA_REG(0), buf, len);
1039
1040exit:
1041        mutex_unlock(&pdata->comms_mutex);
1042        pm_runtime_mark_last_busy(pdata->dev);
1043        pm_runtime_put_autosuspend(pdata->dev);
1044
1045        if (ret)
1046                return ret;
1047        return len;
1048}
1049
1050static int ti_sn_bridge_parse_dsi_host(struct ti_sn65dsi86 *pdata)
1051{
1052        struct device_node *np = pdata->dev->of_node;
1053
1054        pdata->host_node = of_graph_get_remote_node(np, 0, 0);
1055
1056        if (!pdata->host_node) {
1057                DRM_ERROR("remote dsi host node not found\n");
1058                return -ENODEV;
1059        }
1060
1061        return 0;
1062}
1063
1064#if defined(CONFIG_OF_GPIO)
1065
1066static int tn_sn_bridge_of_xlate(struct gpio_chip *chip,
1067                                 const struct of_phandle_args *gpiospec,
1068                                 u32 *flags)
1069{
1070        if (WARN_ON(gpiospec->args_count < chip->of_gpio_n_cells))
1071                return -EINVAL;
1072
1073        if (gpiospec->args[0] > chip->ngpio || gpiospec->args[0] < 1)
1074                return -EINVAL;
1075
1076        if (flags)
1077                *flags = gpiospec->args[1];
1078
1079        return gpiospec->args[0] - SN_GPIO_PHYSICAL_OFFSET;
1080}
1081
1082static int ti_sn_bridge_gpio_get_direction(struct gpio_chip *chip,
1083                                           unsigned int offset)
1084{
1085        struct ti_sn65dsi86 *pdata = gpiochip_get_data(chip);
1086
1087        /*
1088         * We already have to keep track of the direction because we use
1089         * that to figure out whether we've powered the device.  We can
1090         * just return that rather than (maybe) powering up the device
1091         * to ask its direction.
1092         */
1093        return test_bit(offset, pdata->gchip_output) ?
1094                GPIO_LINE_DIRECTION_OUT : GPIO_LINE_DIRECTION_IN;
1095}
1096
1097static int ti_sn_bridge_gpio_get(struct gpio_chip *chip, unsigned int offset)
1098{
1099        struct ti_sn65dsi86 *pdata = gpiochip_get_data(chip);
1100        unsigned int val;
1101        int ret;
1102
1103        /*
1104         * When the pin is an input we don't forcibly keep the bridge
1105         * powered--we just power it on to read the pin.  NOTE: part of
1106         * the reason this works is that the bridge defaults (when
1107         * powered back on) to all 4 GPIOs being configured as GPIO input.
1108         * Also note that if something else is keeping the chip powered the
1109         * pm_runtime functions are lightweight increments of a refcount.
1110         */
1111        pm_runtime_get_sync(pdata->dev);
1112        ret = regmap_read(pdata->regmap, SN_GPIO_IO_REG, &val);
1113        pm_runtime_put_autosuspend(pdata->dev);
1114
1115        if (ret)
1116                return ret;
1117
1118        return !!(val & BIT(SN_GPIO_INPUT_SHIFT + offset));
1119}
1120
1121static void ti_sn_bridge_gpio_set(struct gpio_chip *chip, unsigned int offset,
1122                                  int val)
1123{
1124        struct ti_sn65dsi86 *pdata = gpiochip_get_data(chip);
1125        int ret;
1126
1127        if (!test_bit(offset, pdata->gchip_output)) {
1128                dev_err(pdata->dev, "Ignoring GPIO set while input\n");
1129                return;
1130        }
1131
1132        val &= 1;
1133        ret = regmap_update_bits(pdata->regmap, SN_GPIO_IO_REG,
1134                                 BIT(SN_GPIO_OUTPUT_SHIFT + offset),
1135                                 val << (SN_GPIO_OUTPUT_SHIFT + offset));
1136        if (ret)
1137                dev_warn(pdata->dev,
1138                         "Failed to set bridge GPIO %u: %d\n", offset, ret);
1139}
1140
1141static int ti_sn_bridge_gpio_direction_input(struct gpio_chip *chip,
1142                                             unsigned int offset)
1143{
1144        struct ti_sn65dsi86 *pdata = gpiochip_get_data(chip);
1145        int shift = offset * 2;
1146        int ret;
1147
1148        if (!test_and_clear_bit(offset, pdata->gchip_output))
1149                return 0;
1150
1151        ret = regmap_update_bits(pdata->regmap, SN_GPIO_CTRL_REG,
1152                                 SN_GPIO_MUX_MASK << shift,
1153                                 SN_GPIO_MUX_INPUT << shift);
1154        if (ret) {
1155                set_bit(offset, pdata->gchip_output);
1156                return ret;
1157        }
1158
1159        /*
1160         * NOTE: if nobody else is powering the device this may fully power
1161         * it off and when it comes back it will have lost all state, but
1162         * that's OK because the default is input and we're now an input.
1163         */
1164        pm_runtime_put_autosuspend(pdata->dev);
1165
1166        return 0;
1167}
1168
1169static int ti_sn_bridge_gpio_direction_output(struct gpio_chip *chip,
1170                                              unsigned int offset, int val)
1171{
1172        struct ti_sn65dsi86 *pdata = gpiochip_get_data(chip);
1173        int shift = offset * 2;
1174        int ret;
1175
1176        if (test_and_set_bit(offset, pdata->gchip_output))
1177                return 0;
1178
1179        pm_runtime_get_sync(pdata->dev);
1180
1181        /* Set value first to avoid glitching */
1182        ti_sn_bridge_gpio_set(chip, offset, val);
1183
1184        /* Set direction */
1185        ret = regmap_update_bits(pdata->regmap, SN_GPIO_CTRL_REG,
1186                                 SN_GPIO_MUX_MASK << shift,
1187                                 SN_GPIO_MUX_OUTPUT << shift);
1188        if (ret) {
1189                clear_bit(offset, pdata->gchip_output);
1190                pm_runtime_put_autosuspend(pdata->dev);
1191        }
1192
1193        return ret;
1194}
1195
1196static void ti_sn_bridge_gpio_free(struct gpio_chip *chip, unsigned int offset)
1197{
1198        /* We won't keep pm_runtime if we're input, so switch there on free */
1199        ti_sn_bridge_gpio_direction_input(chip, offset);
1200}
1201
1202static const char * const ti_sn_bridge_gpio_names[SN_NUM_GPIOS] = {
1203        "GPIO1", "GPIO2", "GPIO3", "GPIO4"
1204};
1205
1206static int ti_sn_gpio_probe(struct auxiliary_device *adev,
1207                            const struct auxiliary_device_id *id)
1208{
1209        struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent);
1210        int ret;
1211
1212        /* Only init if someone is going to use us as a GPIO controller */
1213        if (!of_property_read_bool(pdata->dev->of_node, "gpio-controller"))
1214                return 0;
1215
1216        pdata->gchip.label = dev_name(pdata->dev);
1217        pdata->gchip.parent = pdata->dev;
1218        pdata->gchip.owner = THIS_MODULE;
1219        pdata->gchip.of_xlate = tn_sn_bridge_of_xlate;
1220        pdata->gchip.of_gpio_n_cells = 2;
1221        pdata->gchip.free = ti_sn_bridge_gpio_free;
1222        pdata->gchip.get_direction = ti_sn_bridge_gpio_get_direction;
1223        pdata->gchip.direction_input = ti_sn_bridge_gpio_direction_input;
1224        pdata->gchip.direction_output = ti_sn_bridge_gpio_direction_output;
1225        pdata->gchip.get = ti_sn_bridge_gpio_get;
1226        pdata->gchip.set = ti_sn_bridge_gpio_set;
1227        pdata->gchip.can_sleep = true;
1228        pdata->gchip.names = ti_sn_bridge_gpio_names;
1229        pdata->gchip.ngpio = SN_NUM_GPIOS;
1230        pdata->gchip.base = -1;
1231        ret = devm_gpiochip_add_data(&adev->dev, &pdata->gchip, pdata);
1232        if (ret)
1233                dev_err(pdata->dev, "can't add gpio chip\n");
1234
1235        return ret;
1236}
1237
1238static const struct auxiliary_device_id ti_sn_gpio_id_table[] = {
1239        { .name = "ti_sn65dsi86.gpio", },
1240        {},
1241};
1242
1243MODULE_DEVICE_TABLE(auxiliary, ti_sn_gpio_id_table);
1244
1245static struct auxiliary_driver ti_sn_gpio_driver = {
1246        .name = "gpio",
1247        .probe = ti_sn_gpio_probe,
1248        .id_table = ti_sn_gpio_id_table,
1249};
1250
1251static int __init ti_sn_gpio_register(void)
1252{
1253        return auxiliary_driver_register(&ti_sn_gpio_driver);
1254}
1255
1256static void ti_sn_gpio_unregister(void)
1257{
1258        auxiliary_driver_unregister(&ti_sn_gpio_driver);
1259}
1260
1261#else
1262
1263static inline int ti_sn_gpio_register(void) { return 0; }
1264static inline void ti_sn_gpio_unregister(void) {}
1265
1266#endif
1267
1268static void ti_sn_bridge_parse_lanes(struct ti_sn65dsi86 *pdata,
1269                                     struct device_node *np)
1270{
1271        u32 lane_assignments[SN_MAX_DP_LANES] = { 0, 1, 2, 3 };
1272        u32 lane_polarities[SN_MAX_DP_LANES] = { };
1273        struct device_node *endpoint;
1274        u8 ln_assign = 0;
1275        u8 ln_polrs = 0;
1276        int dp_lanes;
1277        int i;
1278
1279        /*
1280         * Read config from the device tree about lane remapping and lane
1281         * polarities.  These are optional and we assume identity map and
1282         * normal polarity if nothing is specified.  It's OK to specify just
1283         * data-lanes but not lane-polarities but not vice versa.
1284         *
1285         * Error checking is light (we just make sure we don't crash or
1286         * buffer overrun) and we assume dts is well formed and specifying
1287         * mappings that the hardware supports.
1288         */
1289        endpoint = of_graph_get_endpoint_by_regs(np, 1, -1);
1290        dp_lanes = of_property_count_u32_elems(endpoint, "data-lanes");
1291        if (dp_lanes > 0 && dp_lanes <= SN_MAX_DP_LANES) {
1292                of_property_read_u32_array(endpoint, "data-lanes",
1293                                           lane_assignments, dp_lanes);
1294                of_property_read_u32_array(endpoint, "lane-polarities",
1295                                           lane_polarities, dp_lanes);
1296        } else {
1297                dp_lanes = SN_MAX_DP_LANES;
1298        }
1299        of_node_put(endpoint);
1300
1301        /*
1302         * Convert into register format.  Loop over all lanes even if
1303         * data-lanes had fewer elements so that we nicely initialize
1304         * the LN_ASSIGN register.
1305         */
1306        for (i = SN_MAX_DP_LANES - 1; i >= 0; i--) {
1307                ln_assign = ln_assign << LN_ASSIGN_WIDTH | lane_assignments[i];
1308                ln_polrs = ln_polrs << 1 | lane_polarities[i];
1309        }
1310
1311        /* Stash in our struct for when we power on */
1312        pdata->dp_lanes = dp_lanes;
1313        pdata->ln_assign = ln_assign;
1314        pdata->ln_polrs = ln_polrs;
1315}
1316
1317static int ti_sn_bridge_probe(struct auxiliary_device *adev,
1318                              const struct auxiliary_device_id *id)
1319{
1320        struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent);
1321        struct device_node *np = pdata->dev->of_node;
1322        int ret;
1323
1324        ret = drm_of_find_panel_or_bridge(np, 1, 0, &pdata->panel, NULL);
1325        if (ret) {
1326                DRM_ERROR("could not find any panel node\n");
1327                return ret;
1328        }
1329
1330        ti_sn_bridge_parse_lanes(pdata, np);
1331
1332        ret = ti_sn_bridge_parse_dsi_host(pdata);
1333        if (ret)
1334                return ret;
1335
1336        pdata->aux.name = "ti-sn65dsi86-aux";
1337        pdata->aux.dev = pdata->dev;
1338        pdata->aux.transfer = ti_sn_aux_transfer;
1339        drm_dp_aux_init(&pdata->aux);
1340
1341        pdata->bridge.funcs = &ti_sn_bridge_funcs;
1342        pdata->bridge.of_node = np;
1343
1344        drm_bridge_add(&pdata->bridge);
1345
1346        return 0;
1347}
1348
1349static void ti_sn_bridge_remove(struct auxiliary_device *adev)
1350{
1351        struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent);
1352
1353        if (!pdata)
1354                return;
1355
1356        if (pdata->dsi) {
1357                mipi_dsi_detach(pdata->dsi);
1358                mipi_dsi_device_unregister(pdata->dsi);
1359        }
1360
1361        kfree(pdata->edid);
1362
1363        drm_bridge_remove(&pdata->bridge);
1364
1365        of_node_put(pdata->host_node);
1366}
1367
1368static const struct auxiliary_device_id ti_sn_bridge_id_table[] = {
1369        { .name = "ti_sn65dsi86.bridge", },
1370        {},
1371};
1372
1373static struct auxiliary_driver ti_sn_bridge_driver = {
1374        .name = "bridge",
1375        .probe = ti_sn_bridge_probe,
1376        .remove = ti_sn_bridge_remove,
1377        .id_table = ti_sn_bridge_id_table,
1378};
1379
1380static void ti_sn65dsi86_runtime_disable(void *data)
1381{
1382        pm_runtime_disable(data);
1383}
1384
1385static void ti_sn65dsi86_uninit_aux(void *data)
1386{
1387        auxiliary_device_uninit(data);
1388}
1389
1390static void ti_sn65dsi86_delete_aux(void *data)
1391{
1392        auxiliary_device_delete(data);
1393}
1394
1395/*
1396 * AUX bus docs say that a non-NULL release is mandatory, but it makes no
1397 * sense for the model used here where all of the aux devices are allocated
1398 * in the single shared structure. We'll use this noop as a workaround.
1399 */
1400static void ti_sn65dsi86_noop(struct device *dev) {}
1401
1402static int ti_sn65dsi86_add_aux_device(struct ti_sn65dsi86 *pdata,
1403                                       struct auxiliary_device *aux,
1404                                       const char *name)
1405{
1406        struct device *dev = pdata->dev;
1407        int ret;
1408
1409        /*
1410         * NOTE: It would be nice to set the "of_node" of our children to be
1411         * the same "of_node"" that the top-level component has. That doesn't
1412         * work, though, since pinctrl will try (and fail) to reserve the
1413         * pins again. Until that gets sorted out the children will just need
1414         * to look at the of_node of the main device.
1415         */
1416
1417        aux->name = name;
1418        aux->dev.parent = dev;
1419        aux->dev.release = ti_sn65dsi86_noop;
1420        ret = auxiliary_device_init(aux);
1421        if (ret)
1422                return ret;
1423        ret = devm_add_action_or_reset(dev, ti_sn65dsi86_uninit_aux, aux);
1424        if (ret)
1425                return ret;
1426
1427        ret = auxiliary_device_add(aux);
1428        if (ret)
1429                return ret;
1430        ret = devm_add_action_or_reset(dev, ti_sn65dsi86_delete_aux, aux);
1431
1432        return ret;
1433}
1434
1435static int ti_sn65dsi86_probe(struct i2c_client *client,
1436                              const struct i2c_device_id *id)
1437{
1438        struct device *dev = &client->dev;
1439        struct ti_sn65dsi86 *pdata;
1440        int ret;
1441
1442        if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
1443                DRM_ERROR("device doesn't support I2C\n");
1444                return -ENODEV;
1445        }
1446
1447        pdata = devm_kzalloc(dev, sizeof(struct ti_sn65dsi86), GFP_KERNEL);
1448        if (!pdata)
1449                return -ENOMEM;
1450        dev_set_drvdata(dev, pdata);
1451        pdata->dev = dev;
1452
1453        mutex_init(&pdata->comms_mutex);
1454
1455        pdata->regmap = devm_regmap_init_i2c(client,
1456                                             &ti_sn65dsi86_regmap_config);
1457        if (IS_ERR(pdata->regmap)) {
1458                DRM_ERROR("regmap i2c init failed\n");
1459                return PTR_ERR(pdata->regmap);
1460        }
1461
1462        pdata->enable_gpio = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW);
1463        if (IS_ERR(pdata->enable_gpio)) {
1464                DRM_ERROR("failed to get enable gpio from DT\n");
1465                ret = PTR_ERR(pdata->enable_gpio);
1466                return ret;
1467        }
1468
1469        ret = ti_sn65dsi86_parse_regulators(pdata);
1470        if (ret) {
1471                DRM_ERROR("failed to parse regulators\n");
1472                return ret;
1473        }
1474
1475        pdata->refclk = devm_clk_get_optional(dev, "refclk");
1476        if (IS_ERR(pdata->refclk))
1477                return PTR_ERR(pdata->refclk);
1478
1479        pm_runtime_enable(dev);
1480        ret = devm_add_action_or_reset(dev, ti_sn65dsi86_runtime_disable, dev);
1481        if (ret)
1482                return ret;
1483        pm_runtime_set_autosuspend_delay(pdata->dev, 500);
1484        pm_runtime_use_autosuspend(pdata->dev);
1485
1486        ti_sn65dsi86_debugfs_init(pdata);
1487
1488        /*
1489         * Break ourselves up into a collection of aux devices. The only real
1490         * motiviation here is to solve the chicken-and-egg problem of probe
1491         * ordering. The bridge wants the panel to be there when it probes.
1492         * The panel wants its HPD GPIO (provided by sn65dsi86 on some boards)
1493         * when it probes. There will soon be other devices (DDC I2C bus, PWM)
1494         * that have the same problem. Having sub-devices allows the some sub
1495         * devices to finish probing even if others return -EPROBE_DEFER and
1496         * gets us around the problems.
1497         */
1498
1499        if (IS_ENABLED(CONFIG_OF_GPIO)) {
1500                ret = ti_sn65dsi86_add_aux_device(pdata, &pdata->gpio_aux, "gpio");
1501                if (ret)
1502                        return ret;
1503        }
1504
1505        return ti_sn65dsi86_add_aux_device(pdata, &pdata->bridge_aux, "bridge");
1506}
1507
1508static struct i2c_device_id ti_sn65dsi86_id[] = {
1509        { "ti,sn65dsi86", 0},
1510        {},
1511};
1512MODULE_DEVICE_TABLE(i2c, ti_sn65dsi86_id);
1513
1514static const struct of_device_id ti_sn65dsi86_match_table[] = {
1515        {.compatible = "ti,sn65dsi86"},
1516        {},
1517};
1518MODULE_DEVICE_TABLE(of, ti_sn65dsi86_match_table);
1519
1520static struct i2c_driver ti_sn65dsi86_driver = {
1521        .driver = {
1522                .name = "ti_sn65dsi86",
1523                .of_match_table = ti_sn65dsi86_match_table,
1524                .pm = &ti_sn65dsi86_pm_ops,
1525        },
1526        .probe = ti_sn65dsi86_probe,
1527        .id_table = ti_sn65dsi86_id,
1528};
1529
1530static int __init ti_sn65dsi86_init(void)
1531{
1532        int ret;
1533
1534        ret = i2c_add_driver(&ti_sn65dsi86_driver);
1535        if (ret)
1536                return ret;
1537
1538        ret = ti_sn_gpio_register();
1539        if (ret)
1540                goto err_main_was_registered;
1541
1542        ret = auxiliary_driver_register(&ti_sn_bridge_driver);
1543        if (ret)
1544                goto err_gpio_was_registered;
1545
1546        return 0;
1547
1548err_gpio_was_registered:
1549        ti_sn_gpio_unregister();
1550err_main_was_registered:
1551        i2c_del_driver(&ti_sn65dsi86_driver);
1552
1553        return ret;
1554}
1555module_init(ti_sn65dsi86_init);
1556
1557static void __exit ti_sn65dsi86_exit(void)
1558{
1559        auxiliary_driver_unregister(&ti_sn_bridge_driver);
1560        ti_sn_gpio_unregister();
1561        i2c_del_driver(&ti_sn65dsi86_driver);
1562}
1563module_exit(ti_sn65dsi86_exit);
1564
1565MODULE_AUTHOR("Sandeep Panda <spanda@codeaurora.org>");
1566MODULE_DESCRIPTION("sn65dsi86 DSI to eDP bridge driver");
1567MODULE_LICENSE("GPL v2");
1568