Commit 07a06214 authored by Timur Tabi's avatar Timur Tabi Committed by Florian Tobias Schandinat

drivers/video: fsl-diu-fb: merge diu_pool into fsl_diu_data

The diu_pool structure contains diu_addr objects for various objects
allocated in DMA space that are used by the DIU, but the only instance
of this structure is a global variable, 'pool'.  Eliminate 'pool' by
merging its fields into the fsl_diu_data structure, which is instantiated
on the heap for each DIU controller found.
Signed-off-by: default avatarTimur Tabi <timur@freescale.com>
Signed-off-by: default avatarFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
parent 3c755b7c
...@@ -55,13 +55,6 @@ struct diu_addr { ...@@ -55,13 +55,6 @@ struct diu_addr {
__u32 offset; __u32 offset;
}; };
struct diu_pool {
struct diu_addr ad;
struct diu_addr gamma;
struct diu_addr pallete;
struct diu_addr cursor;
};
/* /*
* List of supported video modes * List of supported video modes
* *
...@@ -348,6 +341,10 @@ struct fsl_diu_data { ...@@ -348,6 +341,10 @@ struct fsl_diu_data {
enum fsl_diu_monitor_port monitor_port; enum fsl_diu_monitor_port monitor_port;
struct diu __iomem *diu_reg; struct diu __iomem *diu_reg;
spinlock_t reg_lock; spinlock_t reg_lock;
struct diu_addr ad;
struct diu_addr gamma;
struct diu_addr pallete;
struct diu_addr cursor;
}; };
enum mfb_index { enum mfb_index {
...@@ -421,8 +418,6 @@ static struct mfb_info mfb_template[] = { ...@@ -421,8 +418,6 @@ static struct mfb_info mfb_template[] = {
}, },
}; };
static struct diu_pool pool;
/** /**
* fsl_diu_name_to_port - convert a port name to a monitor port enum * fsl_diu_name_to_port - convert a port name to a monitor port enum
* *
...@@ -824,22 +819,23 @@ static void update_lcdc(struct fb_info *info) ...@@ -824,22 +819,23 @@ static void update_lcdc(struct fb_info *info)
hw = machine_data->diu_reg; hw = machine_data->diu_reg;
diu_ops.set_monitor_port(machine_data->monitor_port); diu_ops.set_monitor_port(machine_data->monitor_port);
gamma_table_base = pool.gamma.vaddr; gamma_table_base = machine_data->gamma.vaddr;
cursor_base = pool.cursor.vaddr; cursor_base = machine_data->cursor.vaddr;
/* Prep for DIU init - gamma table, cursor table */ /* Prep for DIU init - gamma table, cursor table */
for (i = 0; i <= 2; i++) for (i = 0; i <= 2; i++)
for (j = 0; j <= 255; j++) for (j = 0; j <= 255; j++)
*gamma_table_base++ = j; *gamma_table_base++ = j;
diu_ops.set_gamma_table(machine_data->monitor_port, pool.gamma.vaddr); diu_ops.set_gamma_table(machine_data->monitor_port,
machine_data->gamma.vaddr);
disable_lcdc(info); disable_lcdc(info);
/* Program DIU registers */ /* Program DIU registers */
out_be32(&hw->gamma, pool.gamma.paddr); out_be32(&hw->gamma, machine_data->gamma.paddr);
out_be32(&hw->cursor, pool.cursor.paddr); out_be32(&hw->cursor, machine_data->cursor.paddr);
out_be32(&hw->bgnd, 0x007F7F7F); /* BGND */ out_be32(&hw->bgnd, 0x007F7F7F); /* BGND */
out_be32(&hw->bgnd_wb, 0); /* BGND_WB */ out_be32(&hw->bgnd_wb, 0); /* BGND_WB */
...@@ -1560,27 +1556,27 @@ static int __devinit fsl_diu_probe(struct platform_device *pdev) ...@@ -1560,27 +1556,27 @@ static int __devinit fsl_diu_probe(struct platform_device *pdev)
machine_data->monitor_port = monitor_port; machine_data->monitor_port = monitor_port;
/* Area descriptor memory pool aligns to 64-bit boundary */ /* Area descriptor memory pool aligns to 64-bit boundary */
if (allocate_buf(&pdev->dev, &pool.ad, if (allocate_buf(&pdev->dev, &machine_data->ad,
sizeof(struct diu_ad) * FSL_AOI_NUM, 8)) sizeof(struct diu_ad) * FSL_AOI_NUM, 8))
return -ENOMEM; return -ENOMEM;
/* Get memory for Gamma Table - 32-byte aligned memory */ /* Get memory for Gamma Table - 32-byte aligned memory */
if (allocate_buf(&pdev->dev, &pool.gamma, 768, 32)) { if (allocate_buf(&pdev->dev, &machine_data->gamma, 768, 32)) {
ret = -ENOMEM; ret = -ENOMEM;
goto error; goto error;
} }
/* For performance, cursor bitmap buffer aligns to 32-byte boundary */ /* For performance, cursor bitmap buffer aligns to 32-byte boundary */
if (allocate_buf(&pdev->dev, &pool.cursor, MAX_CURS * MAX_CURS * 2, if (allocate_buf(&pdev->dev, &machine_data->cursor,
32)) { MAX_CURS * MAX_CURS * 2, 32)) {
ret = -ENOMEM; ret = -ENOMEM;
goto error; goto error;
} }
i = ARRAY_SIZE(machine_data->fsl_diu_info); i = ARRAY_SIZE(machine_data->fsl_diu_info);
machine_data->dummy_ad = (struct diu_ad *) machine_data->dummy_ad = (struct diu_ad *)((u32)machine_data->ad.vaddr +
((u32)pool.ad.vaddr + pool.ad.offset) + i; machine_data->ad.offset) + i;
machine_data->dummy_ad->paddr = pool.ad.paddr + machine_data->dummy_ad->paddr = machine_data->ad.paddr +
i * sizeof(struct diu_ad); i * sizeof(struct diu_ad);
machine_data->dummy_aoi_virt = fsl_diu_alloc(64, &dummy_ad_addr); machine_data->dummy_aoi_virt = fsl_diu_alloc(64, &dummy_ad_addr);
if (!machine_data->dummy_aoi_virt) { if (!machine_data->dummy_aoi_virt) {
...@@ -1609,9 +1605,10 @@ static int __devinit fsl_diu_probe(struct platform_device *pdev) ...@@ -1609,9 +1605,10 @@ static int __devinit fsl_diu_probe(struct platform_device *pdev)
for (i = 0; i < ARRAY_SIZE(machine_data->fsl_diu_info); i++) { for (i = 0; i < ARRAY_SIZE(machine_data->fsl_diu_info); i++) {
machine_data->fsl_diu_info[i]->fix.smem_start = 0; machine_data->fsl_diu_info[i]->fix.smem_start = 0;
mfbi = machine_data->fsl_diu_info[i]->par; mfbi = machine_data->fsl_diu_info[i]->par;
mfbi->ad = (struct diu_ad *)((u32)pool.ad.vaddr mfbi->ad = (struct diu_ad *)((u32)machine_data->ad.vaddr
+ pool.ad.offset) + i; + machine_data->ad.offset) + i;
mfbi->ad->paddr = pool.ad.paddr + i * sizeof(struct diu_ad); mfbi->ad->paddr =
machine_data->ad.paddr + i * sizeof(struct diu_ad);
ret = install_fb(machine_data->fsl_diu_info[i]); ret = install_fb(machine_data->fsl_diu_info[i]);
if (ret) { if (ret) {
dev_err(&pdev->dev, "could not register fb %d\n", i); dev_err(&pdev->dev, "could not register fb %d\n", i);
...@@ -1643,14 +1640,14 @@ static int __devinit fsl_diu_probe(struct platform_device *pdev) ...@@ -1643,14 +1640,14 @@ static int __devinit fsl_diu_probe(struct platform_device *pdev)
for (i = 0; i < ARRAY_SIZE(machine_data->fsl_diu_info); i++) for (i = 0; i < ARRAY_SIZE(machine_data->fsl_diu_info); i++)
uninstall_fb(machine_data->fsl_diu_info[i]); uninstall_fb(machine_data->fsl_diu_info[i]);
if (pool.ad.vaddr) if (machine_data->ad.vaddr)
free_buf(&pdev->dev, &pool.ad, free_buf(&pdev->dev, &machine_data->ad,
sizeof(struct diu_ad) * FSL_AOI_NUM, 8); sizeof(struct diu_ad) * FSL_AOI_NUM, 8);
if (pool.gamma.vaddr) if (machine_data->gamma.vaddr)
free_buf(&pdev->dev, &pool.gamma, 768, 32); free_buf(&pdev->dev, &machine_data->gamma, 768, 32);
if (pool.cursor.vaddr) if (machine_data->cursor.vaddr)
free_buf(&pdev->dev, &pool.cursor, MAX_CURS * MAX_CURS * 2, free_buf(&pdev->dev, &machine_data->cursor,
32); MAX_CURS * MAX_CURS * 2, 32);
if (machine_data->dummy_aoi_virt) if (machine_data->dummy_aoi_virt)
fsl_diu_free(machine_data->dummy_aoi_virt, 64); fsl_diu_free(machine_data->dummy_aoi_virt, 64);
iounmap(machine_data->diu_reg); iounmap(machine_data->diu_reg);
...@@ -1674,13 +1671,14 @@ static int fsl_diu_remove(struct platform_device *pdev) ...@@ -1674,13 +1671,14 @@ static int fsl_diu_remove(struct platform_device *pdev)
free_irq_local(machine_data); free_irq_local(machine_data);
for (i = 0; i < ARRAY_SIZE(machine_data->fsl_diu_info); i++) for (i = 0; i < ARRAY_SIZE(machine_data->fsl_diu_info); i++)
uninstall_fb(machine_data->fsl_diu_info[i]); uninstall_fb(machine_data->fsl_diu_info[i]);
if (pool.ad.vaddr) if (machine_data->ad.vaddr)
free_buf(&pdev->dev, &pool.ad, free_buf(&pdev->dev, &machine_data->ad,
sizeof(struct diu_ad) * FSL_AOI_NUM, 8); sizeof(struct diu_ad) * FSL_AOI_NUM, 8);
if (pool.gamma.vaddr) if (machine_data->gamma.vaddr)
free_buf(&pdev->dev, &pool.gamma, 768, 32); free_buf(&pdev->dev, &machine_data->gamma, 768, 32);
if (pool.cursor.vaddr) if (machine_data->cursor.vaddr)
free_buf(&pdev->dev, &pool.cursor, MAX_CURS * MAX_CURS * 2, 32); free_buf(&pdev->dev, &machine_data->cursor,
MAX_CURS * MAX_CURS * 2, 32);
if (machine_data->dummy_aoi_virt) if (machine_data->dummy_aoi_virt)
fsl_diu_free(machine_data->dummy_aoi_virt, 64); fsl_diu_free(machine_data->dummy_aoi_virt, 64);
iounmap(machine_data->diu_reg); iounmap(machine_data->diu_reg);
......
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