Commit ee334e00 authored by Ladislav Michl's avatar Ladislav Michl Committed by Bartlomiej Zolnierkiewicz

omapfb: dss: Do not duplicate features data

As features data are read only, there is no need to allocate their
copy on the heap.
Suggested-by: default avatarMarkus Elfring <elfring@users.sourceforge.net>
Signed-off-by: default avatarLadislav 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: default avatarBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
parent 1c72004c
...@@ -3976,52 +3976,33 @@ static const struct dispc_features omap54xx_dispc_feats = { ...@@ -3976,52 +3976,33 @@ static const struct dispc_features omap54xx_dispc_feats = {
.has_writeback = true, .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()) { switch (omapdss_get_version()) {
case OMAPDSS_VER_OMAP24xx: case OMAPDSS_VER_OMAP24xx:
src = &omap24xx_dispc_feats; return &omap24xx_dispc_feats;
break;
case OMAPDSS_VER_OMAP34xx_ES1: case OMAPDSS_VER_OMAP34xx_ES1:
src = &omap34xx_rev1_0_dispc_feats; return &omap34xx_rev1_0_dispc_feats;
break;
case OMAPDSS_VER_OMAP34xx_ES3: case OMAPDSS_VER_OMAP34xx_ES3:
case OMAPDSS_VER_OMAP3630: case OMAPDSS_VER_OMAP3630:
case OMAPDSS_VER_AM35xx: case OMAPDSS_VER_AM35xx:
case OMAPDSS_VER_AM43xx: case OMAPDSS_VER_AM43xx:
src = &omap34xx_rev3_0_dispc_feats; return &omap34xx_rev3_0_dispc_feats;
break;
case OMAPDSS_VER_OMAP4430_ES1: case OMAPDSS_VER_OMAP4430_ES1:
case OMAPDSS_VER_OMAP4430_ES2: case OMAPDSS_VER_OMAP4430_ES2:
case OMAPDSS_VER_OMAP4: case OMAPDSS_VER_OMAP4:
src = &omap44xx_dispc_feats; return &omap44xx_dispc_feats;
break;
case OMAPDSS_VER_OMAP5: case OMAPDSS_VER_OMAP5:
case OMAPDSS_VER_DRA7xx: case OMAPDSS_VER_DRA7xx:
src = &omap54xx_dispc_feats; return &omap54xx_dispc_feats;
break;
default: 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) static irqreturn_t dispc_irq_handler(int irq, void *arg)
...@@ -4078,9 +4059,9 @@ static int dispc_bind(struct device *dev, struct device *master, void *data) ...@@ -4078,9 +4059,9 @@ static int dispc_bind(struct device *dev, struct device *master, void *data)
spin_lock_init(&dispc.control_lock); spin_lock_init(&dispc.control_lock);
r = dispc_init_features(dispc.pdev); dispc.feat = dispc_get_features();
if (r) if (!dispc.feat)
return r; return -ENODEV;
dispc_mem = platform_get_resource(dispc.pdev, IORESOURCE_MEM, 0); dispc_mem = platform_get_resource(dispc.pdev, IORESOURCE_MEM, 0);
if (!dispc_mem) { if (!dispc_mem) {
......
...@@ -887,58 +887,37 @@ static const struct dss_features dra7xx_dss_feats = { ...@@ -887,58 +887,37 @@ static const struct dss_features dra7xx_dss_feats = {
.num_ports = ARRAY_SIZE(dra7xx_ports), .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()) { switch (omapdss_get_version()) {
case OMAPDSS_VER_OMAP24xx: case OMAPDSS_VER_OMAP24xx:
src = &omap24xx_dss_feats; return &omap24xx_dss_feats;
break;
case OMAPDSS_VER_OMAP34xx_ES1: case OMAPDSS_VER_OMAP34xx_ES1:
case OMAPDSS_VER_OMAP34xx_ES3: case OMAPDSS_VER_OMAP34xx_ES3:
case OMAPDSS_VER_AM35xx: case OMAPDSS_VER_AM35xx:
src = &omap34xx_dss_feats; return &omap34xx_dss_feats;
break;
case OMAPDSS_VER_OMAP3630: case OMAPDSS_VER_OMAP3630:
src = &omap3630_dss_feats; return &omap3630_dss_feats;
break;
case OMAPDSS_VER_OMAP4430_ES1: case OMAPDSS_VER_OMAP4430_ES1:
case OMAPDSS_VER_OMAP4430_ES2: case OMAPDSS_VER_OMAP4430_ES2:
case OMAPDSS_VER_OMAP4: case OMAPDSS_VER_OMAP4:
src = &omap44xx_dss_feats; return &omap44xx_dss_feats;
break;
case OMAPDSS_VER_OMAP5: case OMAPDSS_VER_OMAP5:
src = &omap54xx_dss_feats; return &omap54xx_dss_feats;
break;
case OMAPDSS_VER_AM43xx: case OMAPDSS_VER_AM43xx:
src = &am43xx_dss_feats; return &am43xx_dss_feats;
break;
case OMAPDSS_VER_DRA7xx: case OMAPDSS_VER_DRA7xx:
src = &dra7xx_dss_feats; return &dra7xx_dss_feats;
break;
default: default:
return -ENODEV; return NULL;
} }
memcpy(dst, src, sizeof(*dst));
dss.feat = dst;
return 0;
} }
static void dss_uninit_ports(struct platform_device *pdev); static void dss_uninit_ports(struct platform_device *pdev);
...@@ -1104,9 +1083,9 @@ static int dss_bind(struct device *dev) ...@@ -1104,9 +1083,9 @@ static int dss_bind(struct device *dev)
dss.pdev = pdev; dss.pdev = pdev;
r = dss_init_features(dss.pdev); dss.feat = dss_get_features();
if (r) if (!dss.feat)
return r; return -ENODEV;
dss_mem = platform_get_resource(dss.pdev, IORESOURCE_MEM, 0); dss_mem = platform_get_resource(dss.pdev, IORESOURCE_MEM, 0);
if (!dss_mem) { if (!dss_mem) {
......
...@@ -189,47 +189,30 @@ static const struct hdmi_phy_features omap54xx_phy_feats = { ...@@ -189,47 +189,30 @@ static const struct hdmi_phy_features omap54xx_phy_feats = {
.max_phy = 186000000, .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()) { switch (omapdss_get_version()) {
case OMAPDSS_VER_OMAP4430_ES1: case OMAPDSS_VER_OMAP4430_ES1:
case OMAPDSS_VER_OMAP4430_ES2: case OMAPDSS_VER_OMAP4430_ES2:
case OMAPDSS_VER_OMAP4: case OMAPDSS_VER_OMAP4:
src = &omap44xx_phy_feats; return &omap44xx_phy_feats;
break;
case OMAPDSS_VER_OMAP5: case OMAPDSS_VER_OMAP5:
case OMAPDSS_VER_DRA7xx: case OMAPDSS_VER_DRA7xx:
src = &omap54xx_phy_feats; return &omap54xx_phy_feats;
break;
default: 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 hdmi_phy_init(struct platform_device *pdev, struct hdmi_phy_data *phy)
{ {
int r;
struct resource *res; struct resource *res;
r = hdmi_phy_init_features(pdev); phy_feat = hdmi_phy_get_features();
if (r) if (!phy_feat)
return r; return -ENODEV;
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "phy"); res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "phy");
if (!res) { if (!res) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment