Date:2010-07-16 19:25:09 (13 years 5 months ago)
Author:Lars C.
Commit:2d6b4fe3044f3bee94f0f3f8d9deabb15ba1d1f9
Message:fbdev: jz4740: Add special tft type lcds support.

Files: drivers/video/jz4740_fb.c (8 diffs)
include/linux/jz4740_fb.h (2 diffs)

Change Details

drivers/video/jz4740_fb.c
153153    JZ_GPIO_BULK_PIN(LCD_DE),
154154    JZ_GPIO_BULK_PIN(LCD_PS),
155155    JZ_GPIO_BULK_PIN(LCD_REV),
156    JZ_GPIO_BULK_PIN(LCD_CLS),
157    JZ_GPIO_BULK_PIN(LCD_SPL),
156158};
157159
158160static const struct jz_gpio_bulk_request jz_lcd_data_pins[] = {
...... 
190192    case JZ_LCD_TYPE_8BIT_SERIAL:
191193        num = 3;
192194        break;
195    case JZ_LCD_TYPE_SPECIAL_TFT_1:
196    case JZ_LCD_TYPE_SPECIAL_TFT_2:
197    case JZ_LCD_TYPE_SPECIAL_TFT_3:
198        num = 8;
199        break;
193200    default:
194201        num = 0;
195202        break;
...... 
211218    case JZ_LCD_TYPE_8BIT_SERIAL:
212219        num = 8;
213220        break;
221    case JZ_LCD_TYPE_SPECIAL_TFT_1:
222    case JZ_LCD_TYPE_SPECIAL_TFT_2:
223    case JZ_LCD_TYPE_SPECIAL_TFT_3:
224        if (jzfb->pdata->bpp == 18)
225            num = 18;
226        else
227            num = 16;
228        break;
214229    default:
215230        num = 0;
216231        break;
...... 
335350static int jzfb_set_par(struct fb_info *info)
336351{
337352    struct jzfb *jzfb = info->par;
353    struct jz4740_fb_platform_data *pdata = jzfb->pdata;
338354    struct fb_var_screeninfo *var = &info->var;
339355    struct fb_videomode *mode;
340356    uint16_t hds, vds;
...... 
363379
364380    ctrl = JZ_LCD_CTRL_OFUP | JZ_LCD_CTRL_BURST_16;
365381
366    switch (jzfb->pdata->bpp) {
382    switch (pdata->bpp) {
367383    case 1:
368384        ctrl |= JZ_LCD_CTRL_BPP_1;
369385        break;
...... 
390406        break;
391407    }
392408
393    cfg = JZ_LCD_CFG_PS_DISABLE | JZ_LCD_CFG_CLS_DISABLE |
394        JZ_LCD_CFG_SPL_DISABLE | JZ_LCD_CFG_REV_DISABLE;
409    cfg = pdata->lcd_type & 0xf;
395410
396411    if (!(mode->sync & FB_SYNC_HOR_HIGH_ACT))
397412        cfg |= JZ_LCD_CFG_HSYNC_ACTIVE_LOW;
...... 
399414    if (!(mode->sync & FB_SYNC_VERT_HIGH_ACT))
400415        cfg |= JZ_LCD_CFG_VSYNC_ACTIVE_LOW;
401416
402    if (jzfb->pdata->pixclk_falling_edge)
417    if (pdata->pixclk_falling_edge)
403418        cfg |= JZ_LCD_CFG_PCLK_FALLING_EDGE;
404419
405    if (jzfb->pdata->date_enable_active_low)
420    if (pdata->date_enable_active_low)
406421        cfg |= JZ_LCD_CFG_DE_ACTIVE_LOW;
407422
408    if (jzfb->pdata->lcd_type == JZ_LCD_TYPE_GENERIC_18_BIT)
423    if (pdata->lcd_type == JZ_LCD_TYPE_GENERIC_18_BIT)
409424        cfg |= JZ_LCD_CFG_18_BIT;
410425
411    cfg |= jzfb->pdata->lcd_type & 0xf;
412
413426    if (mode->pixclock) {
414427        rate = PICOS2KHZ(mode->pixclock) * 1000;
415428        mode->refresh = rate / vt / ht;
416429    } else {
417        if (jzfb->pdata->lcd_type == JZ_LCD_TYPE_8BIT_SERIAL)
430        if (pdata->lcd_type == JZ_LCD_TYPE_8BIT_SERIAL)
418431            rate = mode->refresh * (vt + 2 * mode->xres) * ht;
419432        else
420433            rate = mode->refresh * vt * ht;
...... 
428441    else
429442        ctrl |= JZ_LCD_CTRL_ENABLE;
430443
444    switch (pdata->lcd_type) {
445    case JZ_LCD_TYPE_SPECIAL_TFT_1:
446    case JZ_LCD_TYPE_SPECIAL_TFT_2:
447    case JZ_LCD_TYPE_SPECIAL_TFT_3:
448        writel(pdata->special_tft_config.spl, jzfb->base + JZ_REG_LCD_SPL);
449        writel(pdata->special_tft_config.cls, jzfb->base + JZ_REG_LCD_CLS);
450        writel(pdata->special_tft_config.ps, jzfb->base + JZ_REG_LCD_PS);
451        writel(pdata->special_tft_config.ps, jzfb->base + JZ_REG_LCD_REV);
452        break;
453    default:
454        cfg |= JZ_LCD_CFG_PS_DISABLE;
455        cfg |= JZ_LCD_CFG_CLS_DISABLE;
456        cfg |= JZ_LCD_CFG_SPL_DISABLE;
457        cfg |= JZ_LCD_CFG_REV_DISABLE;
458        break;
459    }
460
431461    writel(mode->hsync_len, jzfb->base + JZ_REG_LCD_HSYNC);
432462    writel(mode->vsync_len, jzfb->base + JZ_REG_LCD_VSYNC);
433463
include/linux/jz4740_fb.h
3232    JZ_LCD_TYPE_8BIT_SERIAL = 12,
3333};
3434
35#define JZ4740_FB_SPECIAL_TFT_CONFIG(start, stop) (((start) << 16) | (stop))
36
3537/*
3638* width: width of the lcd display in mm
3739* height: height of the lcd display in mm
...... 
5153    unsigned int bpp;
5254    enum jz4740_fb_lcd_type lcd_type;
5355
56    struct {
57        uint32_t spl;
58        uint32_t cls;
59        uint32_t ps;
60        uint32_t rev;
61    } special_tft_config;
62
5463    unsigned pixclk_falling_edge:1;
5564    unsigned date_enable_active_low:1;
5665};

Archive Download the corresponding diff file



interactive