Skip to content

Commit

Permalink
baikal_vdu_drm: simplified code a bit
Browse files Browse the repository at this point in the history
Necessary to pick LVDS support bits from SDK-M 5.1
  • Loading branch information
asheplyakov committed Aug 25, 2021
1 parent 761ed54 commit 5435f7f
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 39 deletions.
23 changes: 9 additions & 14 deletions drivers/gpu/drm/baikal/baikal_vdu_connector.c
Expand Up @@ -34,6 +34,9 @@
#include "baikal_vdu_drm.h"
#include "baikal_vdu_regs.h"

#define to_baikal_vdu_private(x) \
container_of(x, struct baikal_vdu_private, connector)

static void baikal_vdu_drm_connector_destroy(struct drm_connector *connector)
{
drm_connector_unregister(connector);
Expand All @@ -43,35 +46,28 @@ static void baikal_vdu_drm_connector_destroy(struct drm_connector *connector)
static enum drm_connector_status baikal_vdu_drm_connector_detect(
struct drm_connector *connector, bool force)
{
struct baikal_vdu_drm_connector *vdu_connector =
to_baikal_vdu_drm_connector(connector);
struct baikal_vdu_private *priv = to_baikal_vdu_private(connector);

return (vdu_connector->panel ?
return (priv->panel ?
connector_status_connected :
connector_status_disconnected);
}

static int baikal_vdu_drm_connector_helper_get_modes(
struct drm_connector *connector)
{
struct baikal_vdu_drm_connector *vdu_connector =
to_baikal_vdu_drm_connector(connector);
struct baikal_vdu_private *priv = to_baikal_vdu_private(connector);

if (!vdu_connector) {
pr_err("%s: vdu_connector == NULL\n", __func__);
return 0;
}
if (!vdu_connector->panel)
if (!priv->panel)
return 0;

return drm_panel_get_modes(vdu_connector->panel, connector);
return drm_panel_get_modes(priv->panel, connector);
}

const struct drm_connector_funcs connector_funcs = {
.fill_modes = drm_helper_probe_single_connector_modes,
.destroy = baikal_vdu_drm_connector_destroy,
.detect = baikal_vdu_drm_connector_detect,
//.dpms = drm_atomic_helper_connector_dpms, // TODO enable it?
.reset = drm_atomic_helper_connector_reset,
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
Expand All @@ -88,8 +84,7 @@ static const struct drm_encoder_funcs encoder_funcs = {
int baikal_vdu_connector_create(struct drm_device *dev)
{
struct baikal_vdu_private *priv = dev->dev_private;
struct baikal_vdu_drm_connector *vdu_connector = &priv->connector;
struct drm_connector *connector = &vdu_connector->connector;
struct drm_connector *connector = &priv->connector;

drm_connector_init(dev, connector, &connector_funcs,
DRM_MODE_CONNECTOR_LVDS);
Expand Down
8 changes: 4 additions & 4 deletions drivers/gpu/drm/baikal/baikal_vdu_crtc.c
Expand Up @@ -193,7 +193,7 @@ static void baikal_vdu_crtc_helper_enable(struct drm_crtc *crtc,
DRM_DEV_DEBUG_DRIVER(crtc->dev->dev, "enabling pixel clock\n");
clk_prepare_enable(priv->clk);

drm_panel_prepare(priv->connector.panel);
drm_panel_prepare(priv->panel);

writel(ISCR_VSC_VFP, priv->regs + ISCR);

Expand All @@ -208,7 +208,7 @@ static void baikal_vdu_crtc_helper_enable(struct drm_crtc *crtc,
cntl |= CR1_LCE + CR1_FDW_16_WORDS + CR1_OPS_LCD24;
writel(cntl, priv->regs + CR1);

drm_panel_enable(priv->connector.panel);
drm_panel_enable(priv->panel);
drm_crtc_vblank_on(crtc);
}

Expand All @@ -217,12 +217,12 @@ void baikal_vdu_crtc_helper_disable(struct drm_crtc *crtc)
struct baikal_vdu_private *priv = crtc->dev->dev_private;

drm_crtc_vblank_off(crtc);
drm_panel_disable(priv->connector.panel);
drm_panel_disable(priv->panel);

/* Disable and Power Down */
//writel(0, priv->regs + CR1);

drm_panel_unprepare(priv->connector.panel);
drm_panel_unprepare(priv->panel);

/* Disable clock */
DRM_DEV_DEBUG_DRIVER(crtc->dev->dev, "disabling pixel clock\n");
Expand Down
18 changes: 2 additions & 16 deletions drivers/gpu/drm/baikal/baikal_vdu_drm.h
Expand Up @@ -23,22 +23,13 @@
#include <drm/drm_gem.h>
#include <drm/drm_simple_kms_helper.h>

struct clk;
struct drm_device;
struct drm_fbdev_cma;
struct drm_panel;

struct baikal_vdu_drm_connector {
struct drm_connector connector;
struct drm_panel *panel;
};

struct baikal_vdu_private {
struct drm_device *drm;

struct baikal_vdu_drm_connector connector;
struct drm_connector connector;
struct drm_crtc crtc;
struct drm_encoder encoder;
struct drm_panel *panel;
struct drm_bridge *bridge;
struct drm_plane primary;

Expand All @@ -52,11 +43,6 @@ struct baikal_vdu_private {
u32 fb_end;
};

#define to_baikal_vdu_drm_connector(x) \
container_of(x, struct baikal_vdu_drm_connector, connector)

extern const struct drm_encoder_funcs baikal_vdu_encoder_funcs;

/* CRTC Functions */
int baikal_vdu_crtc_create(struct drm_device *dev);
irqreturn_t baikal_vdu_irq(int irq, void *data);
Expand Down
7 changes: 3 additions & 4 deletions drivers/gpu/drm/baikal/baikal_vdu_drv.c
Expand Up @@ -23,7 +23,6 @@
#include <linux/arm-smccc.h>
#include <linux/irq.h>
#include <linux/clk.h>
#include <linux/version.h>
#include <linux/shmem_fs.h>
#include <linux/dma-buf.h>
#include <linux/module.h>
Expand Down Expand Up @@ -94,7 +93,7 @@ static int vdu_modeset_init(struct drm_device *dev)
}

ret = drm_of_find_panel_or_bridge(dev->dev->of_node, -1, -1,
&priv->connector.panel,
&priv->panel,
&priv->bridge);
if (ret == -EPROBE_DEFER) {
dev_info(dev->dev, "Bridge probe deferred\n");
Expand All @@ -114,13 +113,13 @@ static int vdu_modeset_init(struct drm_device *dev)
dev_err(dev->dev, "Failed to attach DRM bridge %d\n", ret);
goto out_config;
}
} else if (priv->connector.panel) {
} else if (priv->panel) {
ret = baikal_vdu_connector_create(dev);
if (ret) {
dev_err(dev->dev, "Failed to create DRM connector\n");
goto out_config;
}
ret = drm_connector_attach_encoder(&priv->connector.connector,
ret = drm_connector_attach_encoder(&priv->connector,
&priv->encoder);
if (ret != 0) {
dev_err(dev->dev, "Failed to attach encoder\n");
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/baikal/baikal_vdu_encoder.c
Expand Up @@ -29,7 +29,7 @@

#include "baikal_vdu_drm.h"

const struct drm_encoder_funcs baikal_vdu_encoder_funcs = {
static const struct drm_encoder_funcs baikal_vdu_encoder_funcs = {
.destroy = drm_encoder_cleanup,
};

Expand Down

0 comments on commit 5435f7f

Please sign in to comment.