This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

PCLK in DRA7xx_EVM

Other Parts Discussed in Thread: TLC59108

Hi,

                  I am having a doubt  regarding LCD bus signals in DRA7xx_EVM. I can observe PCLK signal on the lcd bus after getting root message on the LCD. But if I have disconnected LCD bus and rebooted the EVM then not getting any PCLK signal on LCD bus. I guess processor is not getting driving LCD signals. How the processor will know whether LCD bus connected? I guess it should drive LCD signals irrespective of LCD bus connected?  Even if you run pvrsrvinit also fails with bus disconnected. Please explain what exactly happening with LCD bus.

Thanks & Regards,

Ganesh

  • Hello Ganesh,

    Please take a look on this thread - e2e.ti.com/.../376804

    A DRM display driver for TI OMAP and Jacinto 6 platform. Similar to omapfb (fbdev) and omap_vout (v4l2 display) drivers in the past, this driver uses the DSS2 driver to access the display hardware, including support for HDMI, DVI, and various types of LCD panels. And it implements GEM support for buffer allocation (for KMS as well as offscreen buffers used by the xf86-video-omap userspace xorg driver).

    The driver maps CRTCs to overlays, encoders to overlay-managers, and connectors to dssdev's. Note that this arrangement might change slightly
    when support for drm_plane overlays is added.
    Please see the following source in the file: board-support/linux/drivers/gpu/drm/omapdrm/omap_connector.c

    static enum drm_connector_status omap_connector_detect(
    struct drm_connector *connector, bool force)
    {
    struct omap_connector *omap_connector = to_omap_connector(connector);
    struct omap_dss_device *dssdev = omap_connector->dssdev;
    struct omap_dss_driver *dssdrv = dssdev->driver;
    enum drm_connector_status ret;

    if (dssdrv->detect) {
    if (dssdrv->detect(dssdev))
    ret = connector_status_connected;
    else
    ret = connector_status_disconnected;
    } else if (dssdev->type == OMAP_DISPLAY_TYPE_DPI ||
    dssdev->type == OMAP_DISPLAY_TYPE_DBI ||
    dssdev->type == OMAP_DISPLAY_TYPE_SDI ||
    dssdev->type == OMAP_DISPLAY_TYPE_DSI) {
    ret = connector_status_connected;
    } else {
    ret = connector_status_unknown;
    }

    VERB("%s: %d (force=%d)", omap_connector->dssdev->name, ret, force);

    return ret;
    }

    Best regards,
    Yanko
  • Hi Yanko,


    Thanks for your support. In EVM he is using panel-tlc59108, in its source file panel-tlc59108.c

    static int tlc59108_i2c_probe(struct i2c_client *client,
    const struct i2c_device_id *id)
    {
    int r;
    struct regmap *regmap;
    struct panel_drv_data *ddata;
    struct device *dev = &client->dev;
    struct omap_dss_device *dssdev;
    unsigned int val;

    ddata = devm_kzalloc(dev, sizeof(*ddata), GFP_KERNEL);
    if (ddata == NULL)
    return -ENOMEM;

    dev_set_drvdata(dev, ddata);

    r = tlc_probe_of(dev);
    if (r)
    return r;

    regmap = devm_regmap_init_i2c(client, &tlc59108_regmap_config);
    if (IS_ERR(regmap)) {
    r = PTR_ERR(regmap);
    dev_err(dev, "Failed to init regmap: %d\n", r);
    goto err_gpio;
    }

    ddata->regmap = regmap;

    usleep_range(10000, 15000);

    /* Try to read a TLC register to verify if i2c works */
    r = regmap_read(ddata->regmap, TLC59108_MODE1, &val);
    -------------------------------------------------------------------------------------------
    if (r < 0) {
    dev_err(dev, "Failed to set MODE1: %d\n", r);
    goto err_read;
    }
    ---------------------------------------------------------------------------------------------

    dssdev = &ddata->dssdev;
    dssdev->dev = dev;
    dssdev->driver = &panel_dpi_ops;
    dssdev->type = OMAP_DISPLAY_TYPE_DPI;
    dssdev->owner = THIS_MODULE;
    dssdev->panel.timings = ddata->videomode;

    r = omapdss_register_display(dssdev);
    if (r) {
    dev_err(dev, "Failed to register panel\n");
    goto err_reg;
    }

    He is communicating through i2C and if he is unable to probe he is not calling omapdss_register_display(dssdev).
    So that is why whenever i have disconnected LCD Bus he is not driving any signals on LCD bus, hence i am not getting signals. I have just commented the below code then also i am getting PCLK.
    if (r < 0) {
    dev_err(dev, "Failed to set MODE1: %d\n", r);
    goto err_read;
    }

    I have done this because i have connected directly my LCD bus to LVDS. Now i am getting display with LVDS also.

    Thanks & Regards,
    Ganesh