|
@@ -105,24 +105,25 @@ static u32 isi_readl(struct atmel_isi *isi, u32 reg)
|
|
|
static int configure_geometry(struct atmel_isi *isi, u32 width,
|
|
|
u32 height, u32 code)
|
|
|
{
|
|
|
- u32 cfg2, cr;
|
|
|
+ u32 cfg2;
|
|
|
|
|
|
+ /* According to sensor's output format to set cfg2 */
|
|
|
switch (code) {
|
|
|
/* YUV, including grey */
|
|
|
case MEDIA_BUS_FMT_Y8_1X8:
|
|
|
- cr = ISI_CFG2_GRAYSCALE;
|
|
|
+ cfg2 = ISI_CFG2_GRAYSCALE | ISI_CFG2_COL_SPACE_YCbCr;
|
|
|
break;
|
|
|
case MEDIA_BUS_FMT_VYUY8_2X8:
|
|
|
- cr = ISI_CFG2_YCC_SWAP_MODE_3;
|
|
|
+ cfg2 = ISI_CFG2_YCC_SWAP_MODE_3 | ISI_CFG2_COL_SPACE_YCbCr;
|
|
|
break;
|
|
|
case MEDIA_BUS_FMT_UYVY8_2X8:
|
|
|
- cr = ISI_CFG2_YCC_SWAP_MODE_2;
|
|
|
+ cfg2 = ISI_CFG2_YCC_SWAP_MODE_2 | ISI_CFG2_COL_SPACE_YCbCr;
|
|
|
break;
|
|
|
case MEDIA_BUS_FMT_YVYU8_2X8:
|
|
|
- cr = ISI_CFG2_YCC_SWAP_MODE_1;
|
|
|
+ cfg2 = ISI_CFG2_YCC_SWAP_MODE_1 | ISI_CFG2_COL_SPACE_YCbCr;
|
|
|
break;
|
|
|
case MEDIA_BUS_FMT_YUYV8_2X8:
|
|
|
- cr = ISI_CFG2_YCC_SWAP_DEFAULT;
|
|
|
+ cfg2 = ISI_CFG2_YCC_SWAP_DEFAULT | ISI_CFG2_COL_SPACE_YCbCr;
|
|
|
break;
|
|
|
/* RGB, TODO */
|
|
|
default:
|
|
@@ -130,17 +131,10 @@ static int configure_geometry(struct atmel_isi *isi, u32 width,
|
|
|
}
|
|
|
|
|
|
isi_writel(isi, ISI_CTRL, ISI_CTRL_DIS);
|
|
|
-
|
|
|
- cfg2 = isi_readl(isi, ISI_CFG2);
|
|
|
- /* Set YCC swap mode */
|
|
|
- cfg2 &= ~ISI_CFG2_YCC_SWAP_MODE_MASK;
|
|
|
- cfg2 |= cr;
|
|
|
/* Set width */
|
|
|
- cfg2 &= ~(ISI_CFG2_IM_HSIZE_MASK);
|
|
|
cfg2 |= ((width - 1) << ISI_CFG2_IM_HSIZE_OFFSET) &
|
|
|
ISI_CFG2_IM_HSIZE_MASK;
|
|
|
/* Set height */
|
|
|
- cfg2 &= ~(ISI_CFG2_IM_VSIZE_MASK);
|
|
|
cfg2 |= ((height - 1) << ISI_CFG2_IM_VSIZE_OFFSET)
|
|
|
& ISI_CFG2_IM_VSIZE_MASK;
|
|
|
isi_writel(isi, ISI_CFG2, cfg2);
|