diff options
Diffstat (limited to 'target/linux/xburst')
3 files changed, 295 insertions, 106 deletions
diff --git a/target/linux/xburst/files-2.6.32/arch/mips/jz4740/board-qi_lb60.c b/target/linux/xburst/files-2.6.32/arch/mips/jz4740/board-qi_lb60.c index bf0863626b..3866b8d717 100644 --- a/target/linux/xburst/files-2.6.32/arch/mips/jz4740/board-qi_lb60.c +++ b/target/linux/xburst/files-2.6.32/arch/mips/jz4740/board-qi_lb60.c @@ -238,7 +238,7 @@ static struct fb_videomode qi_lb60_video_modes[] = { .name = "320x240", .xres = 320, .yres = 240, - .pixclock = 700000, + .refresh = 30, .left_margin = 140, .right_margin = 273, .upper_margin = 20, @@ -257,6 +257,7 @@ static struct jz4740_fb_platform_data qi_lb60_fb_pdata = { .modes = qi_lb60_video_modes, .bpp = 24, .lcd_type = JZ_LCD_TYPE_8BIT_SERIAL, + .pixclk_falling_edge = 1, }; diff --git a/target/linux/xburst/files-2.6.32/drivers/video/jz4740_fb.c b/target/linux/xburst/files-2.6.32/drivers/video/jz4740_fb.c index ec4fe6d18e..eeb702a6f3 100644 --- a/target/linux/xburst/files-2.6.32/drivers/video/jz4740_fb.c +++ b/target/linux/xburst/files-2.6.32/drivers/video/jz4740_fb.c @@ -15,14 +15,15 @@ #include <linux/types.h> #include <linux/platform_device.h> +#include <linux/console.h> #include <linux/fb.h> #include <linux/module.h> #include <linux/dma-mapping.h> -#include <linux/jz4740_fb.h> - +#include <linux/mutex.h> #include <linux/delay.h> #include <linux/clk.h> +#include <linux/jz4740_fb.h> #include <asm/mach-jz4740/gpio.h> #define JZ_REG_LCD_CFG 0x00 @@ -48,22 +49,22 @@ #define JZ_REG_LCD_CMD1 0x5C #define JZ_LCD_CFG_SLCD BIT(31) -#define JZ_LCD_CFG_PSM BIT(23) -#define JZ_LCD_CFG_CLSM BIT(22) -#define JZ_LCD_CFG_SPLM BIT(21) -#define JZ_LCD_CFG_REVM BIT(20) +#define JZ_LCD_CFG_PS_DISABLE BIT(23) +#define JZ_LCD_CFG_CLS_DISABLE BIT(22) +#define JZ_LCD_CFG_SPL_DISABLE BIT(21) +#define JZ_LCD_CFG_REV_DISABLE BIT(20) #define JZ_LCD_CFG_HSYNCM BIT(19) #define JZ_LCD_CFG_PCLKM BIT(18) #define JZ_LCD_CFG_INV BIT(17) #define JZ_LCD_CFG_SYNC_DIR BIT(16) -#define JZ_LCD_CFG_PSP BIT(15) -#define JZ_LCD_CFG_CLSP BIT(14) -#define JZ_LCD_CFG_SPLP BIT(13) -#define JZ_LCD_CFG_REVP BIT(12) -#define JZ_LCD_CFG_HSYNCP BIT(11) -#define JZ_LCD_CFG_PCLKP BIT(10) -#define JZ_LCD_CFG_DEP BIT(9) -#define JZ_LCD_CFG_VSYNCP BIT(8) +#define JZ_LCD_CFG_PS_POLARITY BIT(15) +#define JZ_LCD_CFG_CLS_POLARITY BIT(14) +#define JZ_LCD_CFG_SPL_POLARITY BIT(13) +#define JZ_LCD_CFG_REV_POLARITY BIT(12) +#define JZ_LCD_CFG_HSYNC_ACTIVE_LOW BIT(11) +#define JZ_LCD_CFG_PCLK_FALLING_EDGE BIT(10) +#define JZ_LCD_CFG_DE_ACTIVE_LOW BIT(9) +#define JZ_LCD_CFG_VSYNC_ACTIVE_LOW BIT(8) #define JZ_LCD_CFG_18_BIT BIT(7) #define JZ_LCD_CFG_PDW BIT(5) | BIT(4) #define JZ_LCD_CFG_MODE_MASK 0xf @@ -117,19 +118,19 @@ struct jzfb { struct resource *mem; struct jz4740_fb_platform_data *pdata; - void *devmem; - size_t devmem_size; - dma_addr_t devmem_phys; - void *vidmem; size_t vidmem_size; + void *vidmem; dma_addr_t vidmem_phys; struct jzfb_framedesc *framedesc; + dma_addr_t framedesc_phys; struct clk *ldclk; struct clk *lpclk; - uint32_t pseudo_palette[16]; unsigned is_enabled:1; + struct mutex lock; /* Protecting against running enable/disable in paralell */ + + uint32_t pseudo_palette[256]; }; static struct fb_fix_screeninfo jzfb_fix __devinitdata = { @@ -142,10 +143,16 @@ static struct fb_fix_screeninfo jzfb_fix __devinitdata = { .accel = FB_ACCEL_NONE, }; -const static struct jz_gpio_bulk_request jz_lcd_pins[] = { +const static struct jz_gpio_bulk_request jz_lcd_ctrl_pins[] = { JZ_GPIO_BULK_PIN(LCD_PCLK), JZ_GPIO_BULK_PIN(LCD_HSYNC), JZ_GPIO_BULK_PIN(LCD_VSYNC), + JZ_GPIO_BULK_PIN(LCD_DE), + JZ_GPIO_BULK_PIN(LCD_PS), + JZ_GPIO_BULK_PIN(LCD_REV), +}; + +const static struct jz_gpio_bulk_request jz_lcd_data_pins[] = { JZ_GPIO_BULK_PIN(LCD_DATA0), JZ_GPIO_BULK_PIN(LCD_DATA1), JZ_GPIO_BULK_PIN(LCD_DATA2), @@ -154,13 +161,68 @@ const static struct jz_gpio_bulk_request jz_lcd_pins[] = { JZ_GPIO_BULK_PIN(LCD_DATA5), JZ_GPIO_BULK_PIN(LCD_DATA6), JZ_GPIO_BULK_PIN(LCD_DATA7), + JZ_GPIO_BULK_PIN(LCD_DATA8), + JZ_GPIO_BULK_PIN(LCD_DATA9), + JZ_GPIO_BULK_PIN(LCD_DATA10), + JZ_GPIO_BULK_PIN(LCD_DATA11), + JZ_GPIO_BULK_PIN(LCD_DATA12), + JZ_GPIO_BULK_PIN(LCD_DATA13), + JZ_GPIO_BULK_PIN(LCD_DATA14), + JZ_GPIO_BULK_PIN(LCD_DATA15), + JZ_GPIO_BULK_PIN(LCD_DATA16), + JZ_GPIO_BULK_PIN(LCD_DATA17), }; +static unsigned int jzfb_num_ctrl_pins(struct jzfb *jzfb) +{ + unsigned int num; -int jzfb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, + switch (jzfb->pdata->lcd_type) { + case JZ_LCD_TYPE_GENERIC_16_BIT: + num = 4; + break; + case JZ_LCD_TYPE_GENERIC_18_BIT: + num = 4; + break; + case JZ_LCD_TYPE_8BIT_SERIAL: + num = 3; + break; + default: + num = 0; + break; + } + return num; +} + +static unsigned int jzfb_num_data_pins(struct jzfb *jzfb) +{ + unsigned int num; + + switch (jzfb->pdata->lcd_type) { + case JZ_LCD_TYPE_GENERIC_16_BIT: + num = 16; + break; + case JZ_LCD_TYPE_GENERIC_18_BIT: + num = 19; + break; + case JZ_LCD_TYPE_8BIT_SERIAL: + num = 8; + break; + default: + num = 0; + break; + } + return num; +} + +static int jzfb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *fb) { + if (regno >= fb->cmap.len) + return -EINVAL; + ((uint32_t*)fb->pseudo_palette)[regno] = red << 16 | green << 8 | blue; + return 0; } @@ -170,30 +232,40 @@ static int jzfb_get_controller_bpp(struct jzfb *jzfb) case 18: case 24: return 32; + case 15: + return 16; default: return jzfb->pdata->bpp; } } -static int jzfb_check_var(struct fb_var_screeninfo *var, struct fb_info *fb) +static struct fb_videomode *jzfb_get_mode(struct jzfb* jzfb, struct fb_var_screeninfo *var) { - struct jzfb* jzfb = fb->par; + size_t i; struct fb_videomode *mode = jzfb->pdata->modes; - int i; - - if (fb->var.bits_per_pixel != jzfb_get_controller_bpp(jzfb) && - fb->var.bits_per_pixel != jzfb->pdata->bpp) - return -EINVAL; for (i = 0; i < jzfb->pdata->num_modes; ++i, ++mode) { - if (mode->xres == fb->var.xres && mode->yres == fb->var.yres) - break; + if (mode->xres == var->xres && mode->yres == var->yres) + return mode; } - if (i == jzfb->pdata->num_modes) + return NULL; +} + +static int jzfb_check_var(struct fb_var_screeninfo *var, struct fb_info *fb) +{ + struct jzfb* jzfb = fb->par; + struct fb_videomode *mode; + + if (var->bits_per_pixel != jzfb_get_controller_bpp(jzfb) && + var->bits_per_pixel != jzfb->pdata->bpp) return -EINVAL; - fb_videomode_to_var(&fb->var, fb-fore starting to build
prereq: $(target/stamp-prereq) tmp/.prereq_packages
@if [ ! -f "$(INCLUDE_DIR)/site/$(REAL_GNU_TARGET_NAME)" ]; then \
echo 'ERROR: Missing site config for target "$(REAL_GNU_TARGET_NAME)" !'; \
echo ' The missing file will cause configure scripts to fail during compilation.'; \
echo ' Please provide a "$(INCLUDE_DIR)/site/$(REAL_GNU_TARGET_NAME)" file and restart the build.'; \
exit 1; \
fi
prepare: .config $(tools/stamp-install) $(toolchain/stamp-install)
world: prepare $(target/stamp-compile) $(package/stamp-compile) $(package/stamp-install) $(target/stamp-install) FORCE
$(_SINGLE)$(SUBMAKE) -r package/index
# update all feeds, re-create index files, install symlinks
package/symlinks:
$(SCRIPT_DIR)/feeds update -a
$(SCRIPT_DIR)/feeds install -a
# re-create index files, install symlinks
package/symlinks-install:
$(SCRIPT_DIR)/feeds update -i
$(SCRIPT_DIR)/feeds install -a
# remove all symlinks, don't touch ./feeds
package/symlinks-clean:
$(SCRIPT_DIR)/feeds uninstall -a
.PHONY: clean dirclean prereq prepare world package/symlinks package/symlinks-install package/symlinks-clean
endif
|