powerpc: Add DIU platform code for MPC8610HPCD

Add platform code to support Freescale DIU.  The platform code includes
framebuffer memory allocation, pixel format, monitor port, etc.

Signed-off-by: York Sun <yorksun@freescale.com>
Signed-off-by: Timur Tabi <timur@freescale.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: "Antonino A. Daplas" <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
York Sun
2008-04-28 02:15:36 -07:00
committed by Linus Torvalds
parent 9b53a9e28a
commit 6f90a8bdd1
3 changed files with 245 additions and 9 deletions

View File

@@ -892,3 +892,44 @@ void fsl_rstcr_restart(char *cmd)
while (1) ;
}
#endif
#if defined(CONFIG_FB_FSL_DIU) || defined(CONFIG_FB_FSL_DIU_MODULE)
struct platform_diu_data_ops diu_ops = {
.diu_size = 1280 * 1024 * 4, /* default one 1280x1024 buffer */
};
EXPORT_SYMBOL(diu_ops);
int __init preallocate_diu_videomemory(void)
{
pr_debug("diu_size=%lu\n", diu_ops.diu_size);
diu_ops.diu_mem = __alloc_bootmem(diu_ops.diu_size, 8, 0);
if (!diu_ops.diu_mem) {
printk(KERN_ERR "fsl-diu: cannot allocate %lu bytes\n",
diu_ops.diu_size);
return -ENOMEM;
}
pr_debug("diu_mem=%p\n", diu_ops.diu_mem);
rh_init(&diu_ops.diu_rh_info, 4096, ARRAY_SIZE(diu_ops.diu_rh_block),
diu_ops.diu_rh_block);
return rh_attach_region(&diu_ops.diu_rh_info,
(unsigned long) diu_ops.diu_mem,
diu_ops.diu_size);
}
static int __init early_parse_diufb(char *p)
{
if (!p)
return 1;
diu_ops.diu_size = _ALIGN_UP(memparse(p, &p), 8);
pr_debug("diu_size=%lu\n", diu_ops.diu_size);
return 0;
}
early_param("diufb", early_parse_diufb);
#endif

View File

@@ -17,5 +17,28 @@ extern int fsl_spi_init(struct spi_board_info *board_infos,
void (*deactivate_cs)(u8 cs, u8 polarity));
extern void fsl_rstcr_restart(char *cmd);
#if defined(CONFIG_FB_FSL_DIU) || defined(CONFIG_FB_FSL_DIU_MODULE)
#include <linux/bootmem.h>
#include <asm/rheap.h>
struct platform_diu_data_ops {
rh_block_t diu_rh_block[16];
rh_info_t diu_rh_info;
unsigned long diu_size;
void *diu_mem;
unsigned int (*get_pixel_format) (unsigned int bits_per_pixel,
int monitor_port);
void (*set_gamma_table) (int monitor_port, char *gamma_table_base);
void (*set_monitor_port) (int monitor_port);
void (*set_pixel_clock) (unsigned int pixclock);
ssize_t (*show_monitor_port) (int monitor_port, char *buf);
int (*set_sysfs_monitor_port) (int val);
};
extern struct platform_diu_data_ops diu_ops;
int __init preallocate_diu_videomemory(void);
#endif
#endif
#endif