Skip to content

Commit

Permalink
omapfb: dss: Do not duplicate features data
Browse files Browse the repository at this point in the history
As features data are read only, there is no need to allocate their
copy on the heap.

Suggested-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
Tested-by: Adam Ford <aford173@gmail.com> #omap3630
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Arvind Yadav <arvind.yadav.cs@gmail.com>
Cc: Markus Elfring <elfring@users.sourceforge.net>
Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>
Cc: Adam Ford <adam.ford@logicpd.com>
[b.zolnierkie: fixed minor CodingStyle errors reported by checkpatch.pl]
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  • Loading branch information
Ladislav Michl authored and Bartlomiej Zolnierkiewicz committed Jan 4, 2018
1 parent 1c72004 commit ee334e0
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 86 deletions.
39 changes: 10 additions & 29 deletions drivers/video/fbdev/omap2/omapfb/dss/dispc.c
Original file line number Diff line number Diff line change
Expand Up @@ -3976,52 +3976,33 @@ static const struct dispc_features omap54xx_dispc_feats = {
.has_writeback = true,
};

static int dispc_init_features(struct platform_device *pdev)
static const struct dispc_features *dispc_get_features(void)
{
const struct dispc_features *src;
struct dispc_features *dst;

dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
if (!dst) {
dev_err(&pdev->dev, "Failed to allocate DISPC Features\n");
return -ENOMEM;
}

switch (omapdss_get_version()) {
case OMAPDSS_VER_OMAP24xx:
src = &omap24xx_dispc_feats;
break;
return &omap24xx_dispc_feats;

case OMAPDSS_VER_OMAP34xx_ES1:
src = &omap34xx_rev1_0_dispc_feats;
break;
return &omap34xx_rev1_0_dispc_feats;

case OMAPDSS_VER_OMAP34xx_ES3:
case OMAPDSS_VER_OMAP3630:
case OMAPDSS_VER_AM35xx:
case OMAPDSS_VER_AM43xx:
src = &omap34xx_rev3_0_dispc_feats;
break;
return &omap34xx_rev3_0_dispc_feats;

case OMAPDSS_VER_OMAP4430_ES1:
case OMAPDSS_VER_OMAP4430_ES2:
case OMAPDSS_VER_OMAP4:
src = &omap44xx_dispc_feats;
break;
return &omap44xx_dispc_feats;

case OMAPDSS_VER_OMAP5:
case OMAPDSS_VER_DRA7xx:
src = &omap54xx_dispc_feats;
break;
return &omap54xx_dispc_feats;

default:
return -ENODEV;
return NULL;
}

memcpy(dst, src, sizeof(*dst));
dispc.feat = dst;

return 0;
}

static irqreturn_t dispc_irq_handler(int irq, void *arg)
Expand Down Expand Up @@ -4078,9 +4059,9 @@ static int dispc_bind(struct device *dev, struct device *master, void *data)

spin_lock_init(&dispc.control_lock);

r = dispc_init_features(dispc.pdev);
if (r)
return r;
dispc.feat = dispc_get_features();
if (!dispc.feat)
return -ENODEV;

dispc_mem = platform_get_resource(dispc.pdev, IORESOURCE_MEM, 0);
if (!dispc_mem) {
Expand Down
45 changes: 12 additions & 33 deletions drivers/video/fbdev/omap2/omapfb/dss/dss.c
Original file line number Diff line number Diff line change
Expand Up @@ -887,58 +887,37 @@ static const struct dss_features dra7xx_dss_feats = {
.num_ports = ARRAY_SIZE(dra7xx_ports),
};

static int dss_init_features(struct platform_device *pdev)
static const struct dss_features *dss_get_features(void)
{
const struct dss_features *src;
struct dss_features *dst;

dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
if (!dst) {
dev_err(&pdev->dev, "Failed to allocate local DSS Features\n");
return -ENOMEM;
}

switch (omapdss_get_version()) {
case OMAPDSS_VER_OMAP24xx:
src = &omap24xx_dss_feats;
break;
return &omap24xx_dss_feats;

case OMAPDSS_VER_OMAP34xx_ES1:
case OMAPDSS_VER_OMAP34xx_ES3:
case OMAPDSS_VER_AM35xx:
src = &omap34xx_dss_feats;
break;
return &omap34xx_dss_feats;

case OMAPDSS_VER_OMAP3630:
src = &omap3630_dss_feats;
break;
return &omap3630_dss_feats;

case OMAPDSS_VER_OMAP4430_ES1:
case OMAPDSS_VER_OMAP4430_ES2:
case OMAPDSS_VER_OMAP4:
src = &omap44xx_dss_feats;
break;
return &omap44xx_dss_feats;

case OMAPDSS_VER_OMAP5:
src = &omap54xx_dss_feats;
break;
return &omap54xx_dss_feats;

case OMAPDSS_VER_AM43xx:
src = &am43xx_dss_feats;
break;
return &am43xx_dss_feats;

case OMAPDSS_VER_DRA7xx:
src = &dra7xx_dss_feats;
break;
return &dra7xx_dss_feats;

default:
return -ENODEV;
return NULL;
}

memcpy(dst, src, sizeof(*dst));
dss.feat = dst;

return 0;
}

static void dss_uninit_ports(struct platform_device *pdev);
Expand Down Expand Up @@ -1104,9 +1083,9 @@ static int dss_bind(struct device *dev)

dss.pdev = pdev;

r = dss_init_features(dss.pdev);
if (r)
return r;
dss.feat = dss_get_features();
if (!dss.feat)
return -ENODEV;

dss_mem = platform_get_resource(dss.pdev, IORESOURCE_MEM, 0);
if (!dss_mem) {
Expand Down
31 changes: 7 additions & 24 deletions drivers/video/fbdev/omap2/omapfb/dss/hdmi_phy.c
Original file line number Diff line number Diff line change
Expand Up @@ -189,47 +189,30 @@ static const struct hdmi_phy_features omap54xx_phy_feats = {
.max_phy = 186000000,
};

static int hdmi_phy_init_features(struct platform_device *pdev)
static const struct hdmi_phy_features *hdmi_phy_get_features(void)
{
struct hdmi_phy_features *dst;
const struct hdmi_phy_features *src;

dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
if (!dst) {
dev_err(&pdev->dev, "Failed to allocate HDMI PHY Features\n");
return -ENOMEM;
}

switch (omapdss_get_version()) {
case OMAPDSS_VER_OMAP4430_ES1:
case OMAPDSS_VER_OMAP4430_ES2:
case OMAPDSS_VER_OMAP4:
src = &omap44xx_phy_feats;
break;
return &omap44xx_phy_feats;

case OMAPDSS_VER_OMAP5:
case OMAPDSS_VER_DRA7xx:
src = &omap54xx_phy_feats;
break;
return &omap54xx_phy_feats;

default:
return -ENODEV;
return NULL;
}

memcpy(dst, src, sizeof(*dst));
phy_feat = dst;

return 0;
}

int hdmi_phy_init(struct platform_device *pdev, struct hdmi_phy_data *phy)
{
int r;
struct resource *res;

r = hdmi_phy_init_features(pdev);
if (r)
return r;
phy_feat = hdmi_phy_get_features();
if (!phy_feat)
return -ENODEV;

res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "phy");
if (!res) {
Expand Down

0 comments on commit ee334e0

Please sign in to comment.