|
@@ -123,83 +123,87 @@ static int __init sh_mipi_setup(struct sh_mipi *mipi,
|
|
u32 linelength;
|
|
u32 linelength;
|
|
bool yuv;
|
|
bool yuv;
|
|
|
|
|
|
- /* Select data format */
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Select data format. MIPI DSI is not hot-pluggable, so, we just use
|
|
|
|
+ * the default videomode. If this ever becomes a problem, We'll have to
|
|
|
|
+ * move this to mipi_display_on() above and use info->var.xres
|
|
|
|
+ */
|
|
switch (pdata->data_format) {
|
|
switch (pdata->data_format) {
|
|
case MIPI_RGB888:
|
|
case MIPI_RGB888:
|
|
pctype = 0;
|
|
pctype = 0;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_24;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_24;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_24BIT;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_24BIT;
|
|
- linelength = ch->lcd_cfg.xres * 3;
|
|
|
|
|
|
+ linelength = ch->lcd_cfg[0].xres * 3;
|
|
yuv = false;
|
|
yuv = false;
|
|
break;
|
|
break;
|
|
case MIPI_RGB565:
|
|
case MIPI_RGB565:
|
|
pctype = 1;
|
|
pctype = 1;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_16;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_16;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_16BIT;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_16BIT;
|
|
- linelength = ch->lcd_cfg.xres * 2;
|
|
|
|
|
|
+ linelength = ch->lcd_cfg[0].xres * 2;
|
|
yuv = false;
|
|
yuv = false;
|
|
break;
|
|
break;
|
|
case MIPI_RGB666_LP:
|
|
case MIPI_RGB666_LP:
|
|
pctype = 2;
|
|
pctype = 2;
|
|
datatype = MIPI_DSI_PIXEL_STREAM_3BYTE_18;
|
|
datatype = MIPI_DSI_PIXEL_STREAM_3BYTE_18;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_24BIT;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_24BIT;
|
|
- linelength = ch->lcd_cfg.xres * 3;
|
|
|
|
|
|
+ linelength = ch->lcd_cfg[0].xres * 3;
|
|
yuv = false;
|
|
yuv = false;
|
|
break;
|
|
break;
|
|
case MIPI_RGB666:
|
|
case MIPI_RGB666:
|
|
pctype = 3;
|
|
pctype = 3;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_18;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_18;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_18BIT;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_18BIT;
|
|
- linelength = (ch->lcd_cfg.xres * 18 + 7) / 8;
|
|
|
|
|
|
+ linelength = (ch->lcd_cfg[0].xres * 18 + 7) / 8;
|
|
yuv = false;
|
|
yuv = false;
|
|
break;
|
|
break;
|
|
case MIPI_BGR888:
|
|
case MIPI_BGR888:
|
|
pctype = 8;
|
|
pctype = 8;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_24;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_24;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_24BIT;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_24BIT;
|
|
- linelength = ch->lcd_cfg.xres * 3;
|
|
|
|
|
|
+ linelength = ch->lcd_cfg[0].xres * 3;
|
|
yuv = false;
|
|
yuv = false;
|
|
break;
|
|
break;
|
|
case MIPI_BGR565:
|
|
case MIPI_BGR565:
|
|
pctype = 9;
|
|
pctype = 9;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_16;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_16;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_16BIT;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_16BIT;
|
|
- linelength = ch->lcd_cfg.xres * 2;
|
|
|
|
|
|
+ linelength = ch->lcd_cfg[0].xres * 2;
|
|
yuv = false;
|
|
yuv = false;
|
|
break;
|
|
break;
|
|
case MIPI_BGR666_LP:
|
|
case MIPI_BGR666_LP:
|
|
pctype = 0xa;
|
|
pctype = 0xa;
|
|
datatype = MIPI_DSI_PIXEL_STREAM_3BYTE_18;
|
|
datatype = MIPI_DSI_PIXEL_STREAM_3BYTE_18;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_24BIT;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_24BIT;
|
|
- linelength = ch->lcd_cfg.xres * 3;
|
|
|
|
|
|
+ linelength = ch->lcd_cfg[0].xres * 3;
|
|
yuv = false;
|
|
yuv = false;
|
|
break;
|
|
break;
|
|
case MIPI_BGR666:
|
|
case MIPI_BGR666:
|
|
pctype = 0xb;
|
|
pctype = 0xb;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_18;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_18;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_18BIT;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_18BIT;
|
|
- linelength = (ch->lcd_cfg.xres * 18 + 7) / 8;
|
|
|
|
|
|
+ linelength = (ch->lcd_cfg[0].xres * 18 + 7) / 8;
|
|
yuv = false;
|
|
yuv = false;
|
|
break;
|
|
break;
|
|
case MIPI_YUYV:
|
|
case MIPI_YUYV:
|
|
pctype = 4;
|
|
pctype = 4;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_16BIT;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_16BIT;
|
|
- linelength = ch->lcd_cfg.xres * 2;
|
|
|
|
|
|
+ linelength = ch->lcd_cfg[0].xres * 2;
|
|
yuv = true;
|
|
yuv = true;
|
|
break;
|
|
break;
|
|
case MIPI_UYVY:
|
|
case MIPI_UYVY:
|
|
pctype = 5;
|
|
pctype = 5;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_16BIT;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_16BIT;
|
|
- linelength = ch->lcd_cfg.xres * 2;
|
|
|
|
|
|
+ linelength = ch->lcd_cfg[0].xres * 2;
|
|
yuv = true;
|
|
yuv = true;
|
|
break;
|
|
break;
|
|
case MIPI_YUV420_L:
|
|
case MIPI_YUV420_L:
|
|
pctype = 6;
|
|
pctype = 6;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_12BIT;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_12BIT;
|
|
- linelength = (ch->lcd_cfg.xres * 12 + 7) / 8;
|
|
|
|
|
|
+ linelength = (ch->lcd_cfg[0].xres * 12 + 7) / 8;
|
|
yuv = true;
|
|
yuv = true;
|
|
break;
|
|
break;
|
|
case MIPI_YUV420:
|
|
case MIPI_YUV420:
|
|
@@ -207,7 +211,7 @@ static int __init sh_mipi_setup(struct sh_mipi *mipi,
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12;
|
|
datatype = MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_12BIT;
|
|
pixfmt = MIPI_DCS_PIXEL_FMT_12BIT;
|
|
/* Length of U/V line */
|
|
/* Length of U/V line */
|
|
- linelength = (ch->lcd_cfg.xres + 1) / 2;
|
|
|
|
|
|
+ linelength = (ch->lcd_cfg[0].xres + 1) / 2;
|
|
yuv = true;
|
|
yuv = true;
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
@@ -281,7 +285,7 @@ static int __init sh_mipi_setup(struct sh_mipi *mipi,
|
|
iowrite32(0x00e00000, base + 0x8024); /* VMCTR2 */
|
|
iowrite32(0x00e00000, base + 0x8024); /* VMCTR2 */
|
|
/*
|
|
/*
|
|
* 0x660 = 1632 bytes per line (RGB24, 544 pixels: see
|
|
* 0x660 = 1632 bytes per line (RGB24, 544 pixels: see
|
|
- * sh_mobile_lcdc_info.ch[0].lcd_cfg.xres), HSALEN = 1 - default
|
|
|
|
|
|
+ * sh_mobile_lcdc_info.ch[0].lcd_cfg[0].xres), HSALEN = 1 - default
|
|
* (unused, since VMCTR2[HSABM] = 0)
|
|
* (unused, since VMCTR2[HSABM] = 0)
|
|
*/
|
|
*/
|
|
iowrite32(1 | (linelength << 16), base + 0x8028); /* VMLEN1 */
|
|
iowrite32(1 | (linelength << 16), base + 0x8028); /* VMLEN1 */
|