mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-13 16:50:05 +00:00
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: Timur Tabi <timur@freescale.com> Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
This commit is contained in:
parent
3c755b7c09
commit
07a0621403
@ -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 {
|
|||||||
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[] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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 @@ error:
|
|||||||
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)
|
|||||||
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user