Commit 8fc67b18 authored by Kate Hsuan's avatar Kate Hsuan Committed by Mauro Carvalho Chehab

media: atomisp: Make two individual enum to define the MIPI format

The original mipi_format_t represents the MIPI format settings for both
atomisp with the same name and the enum member was controlled by #if
defined(ISP2401). However, if we want to make this driver generic, this
enum should be individually defined for them.

Since the format type is redefined, the format setting function
ia_css_isys_set_fmt_type() should be reworked for ISP2400 and ISP2401
called ia_css_isys_2400_set_fmt_type() and ia_css_isys_2401_set_fmt_type()
.

Additionally, the function called is_mipi_format_yuv420() isn't used by any
functions so it can be removed.

Link: https://lore.kernel.org/r/20230713100231.308923-3-hpa@redhat.comSigned-off-by: default avatarKate Hsuan <hpa@redhat.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent b0e59612
......@@ -186,19 +186,6 @@ void receiver_get_state(
_HRT_CSS_RECEIVER_BE_IRQ_CLEAR_REG_IDX);
}
bool is_mipi_format_yuv420(
const mipi_format_t mipi_format)
{
bool is_yuv420 = (
(mipi_format == MIPI_FORMAT_YUV420_8) ||
(mipi_format == MIPI_FORMAT_YUV420_10) ||
(mipi_format == MIPI_FORMAT_YUV420_8_SHIFT) ||
(mipi_format == MIPI_FORMAT_YUV420_10_SHIFT));
/* MIPI_FORMAT_YUV420_8_LEGACY is not YUV420 */
return is_yuv420;
}
void receiver_set_compression(
const rx_ID_t ID,
const unsigned int cfg_ID,
......
......@@ -168,40 +168,40 @@ typedef struct acquisition_unit_state_s acquisition_unit_state_t;
typedef struct ctrl_unit_state_s ctrl_unit_state_t;
typedef enum {
MIPI_FORMAT_RGB888 = 0,
MIPI_FORMAT_RGB555,
MIPI_FORMAT_RGB444,
MIPI_FORMAT_RGB565,
MIPI_FORMAT_RGB666,
MIPI_FORMAT_RAW8, /* 5 */
MIPI_FORMAT_RAW10,
MIPI_FORMAT_RAW6,
MIPI_FORMAT_RAW7,
MIPI_FORMAT_RAW12,
MIPI_FORMAT_RAW14, /* 10 */
MIPI_FORMAT_YUV420_8,
MIPI_FORMAT_YUV420_10,
MIPI_FORMAT_YUV422_8,
MIPI_FORMAT_YUV422_10,
MIPI_FORMAT_CUSTOM0, /* 15 */
MIPI_FORMAT_YUV420_8_LEGACY,
MIPI_FORMAT_EMBEDDED,
MIPI_FORMAT_CUSTOM1,
MIPI_FORMAT_CUSTOM2,
MIPI_FORMAT_CUSTOM3, /* 20 */
MIPI_FORMAT_CUSTOM4,
MIPI_FORMAT_CUSTOM5,
MIPI_FORMAT_CUSTOM6,
MIPI_FORMAT_CUSTOM7,
MIPI_FORMAT_YUV420_8_SHIFT, /* 25 */
MIPI_FORMAT_YUV420_10_SHIFT,
MIPI_FORMAT_RAW16,
MIPI_FORMAT_RAW18,
N_MIPI_FORMAT,
} mipi_format_t;
#define MIPI_FORMAT_JPEG MIPI_FORMAT_CUSTOM0
#define MIPI_FORMAT_BINARY_8 MIPI_FORMAT_CUSTOM0
MIPI_FORMAT_2400_RGB888 = 0,
MIPI_FORMAT_2400_RGB555,
MIPI_FORMAT_2400_RGB444,
MIPI_FORMAT_2400_RGB565,
MIPI_FORMAT_2400_RGB666,
MIPI_FORMAT_2400_RAW8, /* 5 */
MIPI_FORMAT_2400_RAW10,
MIPI_FORMAT_2400_RAW6,
MIPI_FORMAT_2400_RAW7,
MIPI_FORMAT_2400_RAW12,
MIPI_FORMAT_2400_RAW14, /* 10 */
MIPI_FORMAT_2400_YUV420_8,
MIPI_FORMAT_2400_YUV420_10,
MIPI_FORMAT_2400_YUV422_8,
MIPI_FORMAT_2400_YUV422_10,
MIPI_FORMAT_2400_CUSTOM0, /* 15 */
MIPI_FORMAT_2400_YUV420_8_LEGACY,
MIPI_FORMAT_2400_EMBEDDED,
MIPI_FORMAT_2400_CUSTOM1,
MIPI_FORMAT_2400_CUSTOM2,
MIPI_FORMAT_2400_CUSTOM3, /* 20 */
MIPI_FORMAT_2400_CUSTOM4,
MIPI_FORMAT_2400_CUSTOM5,
MIPI_FORMAT_2400_CUSTOM6,
MIPI_FORMAT_2400_CUSTOM7,
MIPI_FORMAT_2400_YUV420_8_SHIFT, /* 25 */
MIPI_FORMAT_2400_YUV420_10_SHIFT,
MIPI_FORMAT_2400_RAW16,
MIPI_FORMAT_2400_RAW18,
N_MIPI_FORMAT_2400,
} mipi_format_2400_t;
#define MIPI_FORMAT_JPEG MIPI_FORMAT_2400_CUSTOM0
#define MIPI_FORMAT_BINARY_8 MIPI_FORMAT_2400_CUSTOM0
#define N_MIPI_FORMAT_CUSTOM 8
/* The number of stores for compressed format types */
......
......@@ -48,8 +48,6 @@ void receiver_get_state(
\return mipi_format == YUV420
*/
bool is_mipi_format_yuv420(
const mipi_format_t mipi_format);
/*! Set compression parameters for cfg[cfg_ID] of RECEIVER[ID]
......
......@@ -22,45 +22,45 @@
#include "isys_irq.h"
typedef enum {
MIPI_FORMAT_SHORT1 = 0x08,
MIPI_FORMAT_SHORT2,
MIPI_FORMAT_SHORT3,
MIPI_FORMAT_SHORT4,
MIPI_FORMAT_SHORT5,
MIPI_FORMAT_SHORT6,
MIPI_FORMAT_SHORT7,
MIPI_FORMAT_SHORT8,
MIPI_FORMAT_EMBEDDED = 0x12,
MIPI_FORMAT_YUV420_8 = 0x18,
MIPI_FORMAT_YUV420_10,
MIPI_FORMAT_YUV420_8_LEGACY,
MIPI_FORMAT_YUV420_8_SHIFT = 0x1C,
MIPI_FORMAT_YUV420_10_SHIFT,
MIPI_FORMAT_YUV422_8 = 0x1E,
MIPI_FORMAT_YUV422_10,
MIPI_FORMAT_RGB444 = 0x20,
MIPI_FORMAT_RGB555,
MIPI_FORMAT_RGB565,
MIPI_FORMAT_RGB666,
MIPI_FORMAT_RGB888,
MIPI_FORMAT_RAW6 = 0x28,
MIPI_FORMAT_RAW7,
MIPI_FORMAT_RAW8,
MIPI_FORMAT_RAW10,
MIPI_FORMAT_RAW12,
MIPI_FORMAT_RAW14,
MIPI_FORMAT_CUSTOM0 = 0x30,
MIPI_FORMAT_CUSTOM1,
MIPI_FORMAT_CUSTOM2,
MIPI_FORMAT_CUSTOM3,
MIPI_FORMAT_CUSTOM4,
MIPI_FORMAT_CUSTOM5,
MIPI_FORMAT_CUSTOM6,
MIPI_FORMAT_CUSTOM7,
MIPI_FORMAT_2401_SHORT1 = 0x08,
MIPI_FORMAT_2401_SHORT2,
MIPI_FORMAT_2401_SHORT3,
MIPI_FORMAT_2401_SHORT4,
MIPI_FORMAT_2401_SHORT5,
MIPI_FORMAT_2401_SHORT6,
MIPI_FORMAT_2401_SHORT7,
MIPI_FORMAT_2401_SHORT8,
MIPI_FORMAT_2401_EMBEDDED = 0x12,
MIPI_FORMAT_2401_YUV420_8 = 0x18,
MIPI_FORMAT_2401_YUV420_10,
MIPI_FORMAT_2401_YUV420_8_LEGACY,
MIPI_FORMAT_2401_YUV420_8_SHIFT = 0x1C,
MIPI_FORMAT_2401_YUV420_10_SHIFT,
MIPI_FORMAT_2401_YUV422_8 = 0x1E,
MIPI_FORMAT_2401_YUV422_10,
MIPI_FORMAT_2401_RGB444 = 0x20,
MIPI_FORMAT_2401_RGB555,
MIPI_FORMAT_2401_RGB565,
MIPI_FORMAT_2401_RGB666,
MIPI_FORMAT_2401_RGB888,
MIPI_FORMAT_2401_RAW6 = 0x28,
MIPI_FORMAT_2401_RAW7,
MIPI_FORMAT_2401_RAW8,
MIPI_FORMAT_2401_RAW10,
MIPI_FORMAT_2401_RAW12,
MIPI_FORMAT_2401_RAW14,
MIPI_FORMAT_2401_CUSTOM0 = 0x30,
MIPI_FORMAT_2401_CUSTOM1,
MIPI_FORMAT_2401_CUSTOM2,
MIPI_FORMAT_2401_CUSTOM3,
MIPI_FORMAT_2401_CUSTOM4,
MIPI_FORMAT_2401_CUSTOM5,
MIPI_FORMAT_2401_CUSTOM6,
MIPI_FORMAT_2401_CUSTOM7,
//MIPI_FORMAT_RAW16, /*not supported by 2401*/
//MIPI_FORMAT_RAW18,
N_MIPI_FORMAT
} mipi_format_t;
N_MIPI_FORMAT_2401
} mipi_format_2401_t;
#define N_MIPI_FORMAT_CUSTOM 8
......
......@@ -211,142 +211,160 @@ void ia_css_isys_rx_clear_irq_info(enum mipi_port_id port,
}
#endif /* #if !defined(ISP2401) */
int ia_css_isys_convert_stream_format_to_mipi_format(
enum atomisp_input_format input_format,
mipi_predictor_t compression,
unsigned int *fmt_type)
#if !defined(ISP2401)
static int ia_css_isys_2400_set_fmt_type(enum atomisp_input_format input_format,
unsigned int *fmt_type)
{
assert(fmt_type);
/*
* Custom (user defined) modes. Used for compressed
* MIPI transfers
*
* Checkpatch thinks the indent before "if" is suspect
* I think the only suspect part is the missing "else"
* because of the return.
*/
if (compression != MIPI_PREDICTOR_NONE) {
switch (input_format) {
case ATOMISP_INPUT_FORMAT_RAW_6:
*fmt_type = 6;
break;
case ATOMISP_INPUT_FORMAT_RAW_7:
*fmt_type = 7;
break;
case ATOMISP_INPUT_FORMAT_RAW_8:
*fmt_type = 8;
break;
case ATOMISP_INPUT_FORMAT_RAW_10:
*fmt_type = 10;
break;
case ATOMISP_INPUT_FORMAT_RAW_12:
*fmt_type = 12;
break;
case ATOMISP_INPUT_FORMAT_RAW_14:
*fmt_type = 14;
break;
case ATOMISP_INPUT_FORMAT_RAW_16:
*fmt_type = 16;
break;
default:
return -EINVAL;
}
return 0;
}
/*
* This mapping comes from the Arasan CSS function spec
* (CSS_func_spec1.08_ahb_sep29_08.pdf).
*
* MW: For some reason the mapping is not 1-to-1
*/
switch (input_format) {
case ATOMISP_INPUT_FORMAT_RGB_888:
*fmt_type = MIPI_FORMAT_RGB888;
*fmt_type = MIPI_FORMAT_2400_RGB888;
break;
case ATOMISP_INPUT_FORMAT_RGB_555:
*fmt_type = MIPI_FORMAT_RGB555;
*fmt_type = MIPI_FORMAT_2400_RGB555;
break;
case ATOMISP_INPUT_FORMAT_RGB_444:
*fmt_type = MIPI_FORMAT_RGB444;
*fmt_type = MIPI_FORMAT_2400_RGB444;
break;
case ATOMISP_INPUT_FORMAT_RGB_565:
*fmt_type = MIPI_FORMAT_RGB565;
*fmt_type = MIPI_FORMAT_2400_RGB565;
break;
case ATOMISP_INPUT_FORMAT_RGB_666:
*fmt_type = MIPI_FORMAT_RGB666;
*fmt_type = MIPI_FORMAT_2400_RGB666;
break;
case ATOMISP_INPUT_FORMAT_RAW_8:
*fmt_type = MIPI_FORMAT_RAW8;
*fmt_type = MIPI_FORMAT_2400_RAW8;
break;
case ATOMISP_INPUT_FORMAT_RAW_10:
*fmt_type = MIPI_FORMAT_RAW10;
*fmt_type = MIPI_FORMAT_2400_RAW10;
break;
case ATOMISP_INPUT_FORMAT_RAW_6:
*fmt_type = MIPI_FORMAT_RAW6;
*fmt_type = MIPI_FORMAT_2400_RAW6;
break;
case ATOMISP_INPUT_FORMAT_RAW_7:
*fmt_type = MIPI_FORMAT_RAW7;
*fmt_type = MIPI_FORMAT_2400_RAW7;
break;
case ATOMISP_INPUT_FORMAT_RAW_12:
*fmt_type = MIPI_FORMAT_RAW12;
*fmt_type = MIPI_FORMAT_2400_RAW12;
break;
case ATOMISP_INPUT_FORMAT_RAW_14:
*fmt_type = MIPI_FORMAT_RAW14;
*fmt_type = MIPI_FORMAT_2400_RAW14;
break;
case ATOMISP_INPUT_FORMAT_YUV420_8:
*fmt_type = MIPI_FORMAT_YUV420_8;
*fmt_type = MIPI_FORMAT_2400_YUV420_8;
break;
case ATOMISP_INPUT_FORMAT_YUV420_10:
*fmt_type = MIPI_FORMAT_YUV420_10;
*fmt_type = MIPI_FORMAT_2400_YUV420_10;
break;
case ATOMISP_INPUT_FORMAT_YUV422_8:
*fmt_type = MIPI_FORMAT_YUV422_8;
*fmt_type = MIPI_FORMAT_2400_YUV422_8;
break;
case ATOMISP_INPUT_FORMAT_YUV422_10:
*fmt_type = MIPI_FORMAT_YUV422_10;
*fmt_type = MIPI_FORMAT_2400_YUV422_10;
break;
case ATOMISP_INPUT_FORMAT_YUV420_8_LEGACY:
*fmt_type = MIPI_FORMAT_YUV420_8_LEGACY;
*fmt_type = MIPI_FORMAT_2400_YUV420_8_LEGACY;
break;
case ATOMISP_INPUT_FORMAT_EMBEDDED:
*fmt_type = MIPI_FORMAT_EMBEDDED;
*fmt_type = MIPI_FORMAT_2400_EMBEDDED;
break;
#ifndef ISP2401
case ATOMISP_INPUT_FORMAT_RAW_16:
/* This is not specified by Arasan, so we use
* 17 for now.
*/
*fmt_type = MIPI_FORMAT_RAW16;
*fmt_type = MIPI_FORMAT_2400_RAW16;
break;
case ATOMISP_INPUT_FORMAT_BINARY_8:
*fmt_type = MIPI_FORMAT_BINARY_8;
break;
#else
case ATOMISP_INPUT_FORMAT_YUV420_16:
case ATOMISP_INPUT_FORMAT_YUV422_16:
default:
return -EINVAL;
}
return 0;
}
#endif /* #ifndef ISP2401 */
#if defined(ISP2401)
static int ia_css_isys_2401_set_fmt_type(enum atomisp_input_format input_format,
unsigned int *fmt_type)
{
switch (input_format) {
case ATOMISP_INPUT_FORMAT_RGB_888:
*fmt_type = MIPI_FORMAT_2401_RGB888;
break;
case ATOMISP_INPUT_FORMAT_RGB_555:
*fmt_type = MIPI_FORMAT_2401_RGB555;
break;
case ATOMISP_INPUT_FORMAT_RGB_444:
*fmt_type = MIPI_FORMAT_2401_RGB444;
break;
case ATOMISP_INPUT_FORMAT_RGB_565:
*fmt_type = MIPI_FORMAT_2401_RGB565;
break;
case ATOMISP_INPUT_FORMAT_RGB_666:
*fmt_type = MIPI_FORMAT_2401_RGB666;
break;
case ATOMISP_INPUT_FORMAT_RAW_8:
*fmt_type = MIPI_FORMAT_2401_RAW8;
break;
case ATOMISP_INPUT_FORMAT_RAW_10:
*fmt_type = MIPI_FORMAT_2401_RAW10;
break;
case ATOMISP_INPUT_FORMAT_RAW_6:
*fmt_type = MIPI_FORMAT_2401_RAW6;
break;
case ATOMISP_INPUT_FORMAT_RAW_7:
*fmt_type = MIPI_FORMAT_2401_RAW7;
break;
case ATOMISP_INPUT_FORMAT_RAW_12:
*fmt_type = MIPI_FORMAT_2401_RAW12;
break;
case ATOMISP_INPUT_FORMAT_RAW_14:
*fmt_type = MIPI_FORMAT_2401_RAW14;
break;
case ATOMISP_INPUT_FORMAT_YUV420_8:
*fmt_type = MIPI_FORMAT_2401_YUV420_8;
break;
case ATOMISP_INPUT_FORMAT_YUV420_10:
*fmt_type = MIPI_FORMAT_2401_YUV420_10;
break;
case ATOMISP_INPUT_FORMAT_YUV422_8:
*fmt_type = MIPI_FORMAT_2401_YUV422_8;
break;
case ATOMISP_INPUT_FORMAT_YUV422_10:
*fmt_type = MIPI_FORMAT_2401_YUV422_10;
break;
case ATOMISP_INPUT_FORMAT_YUV420_8_LEGACY:
*fmt_type = MIPI_FORMAT_2401_YUV420_8_LEGACY;
break;
case ATOMISP_INPUT_FORMAT_EMBEDDED:
*fmt_type = MIPI_FORMAT_2401_EMBEDDED;
break;
case ATOMISP_INPUT_FORMAT_USER_DEF1:
*fmt_type = MIPI_FORMAT_CUSTOM0;
*fmt_type = MIPI_FORMAT_2401_CUSTOM0;
break;
case ATOMISP_INPUT_FORMAT_USER_DEF2:
*fmt_type = MIPI_FORMAT_CUSTOM1;
*fmt_type = MIPI_FORMAT_2401_CUSTOM1;
break;
case ATOMISP_INPUT_FORMAT_USER_DEF3:
*fmt_type = MIPI_FORMAT_CUSTOM2;
*fmt_type = MIPI_FORMAT_2401_CUSTOM2;
break;
case ATOMISP_INPUT_FORMAT_USER_DEF4:
*fmt_type = MIPI_FORMAT_CUSTOM3;
*fmt_type = MIPI_FORMAT_2401_CUSTOM3;
break;
case ATOMISP_INPUT_FORMAT_USER_DEF5:
*fmt_type = MIPI_FORMAT_CUSTOM4;
*fmt_type = MIPI_FORMAT_2401_CUSTOM4;
break;
case ATOMISP_INPUT_FORMAT_USER_DEF6:
*fmt_type = MIPI_FORMAT_CUSTOM5;
*fmt_type = MIPI_FORMAT_2401_CUSTOM5;
break;
case ATOMISP_INPUT_FORMAT_USER_DEF7:
*fmt_type = MIPI_FORMAT_CUSTOM6;
*fmt_type = MIPI_FORMAT_2401_CUSTOM6;
break;
case ATOMISP_INPUT_FORMAT_USER_DEF8:
*fmt_type = MIPI_FORMAT_CUSTOM7;
*fmt_type = MIPI_FORMAT_2401_CUSTOM7;
break;
#endif
case ATOMISP_INPUT_FORMAT_YUV420_16:
case ATOMISP_INPUT_FORMAT_YUV422_16:
......@@ -355,6 +373,62 @@ int ia_css_isys_convert_stream_format_to_mipi_format(
}
return 0;
}
#endif /* #ifdef ISP2401 */
int ia_css_isys_convert_stream_format_to_mipi_format(
enum atomisp_input_format input_format,
mipi_predictor_t compression,
unsigned int *fmt_type)
{
assert(fmt_type);
/*
* Custom (user defined) modes. Used for compressed
* MIPI transfers
*
* Checkpatch thinks the indent before "if" is suspect
* I think the only suspect part is the missing "else"
* because of the return.
*/
if (compression != MIPI_PREDICTOR_NONE) {
switch (input_format) {
case ATOMISP_INPUT_FORMAT_RAW_6:
*fmt_type = 6;
break;
case ATOMISP_INPUT_FORMAT_RAW_7:
*fmt_type = 7;
break;
case ATOMISP_INPUT_FORMAT_RAW_8:
*fmt_type = 8;
break;
case ATOMISP_INPUT_FORMAT_RAW_10:
*fmt_type = 10;
break;
case ATOMISP_INPUT_FORMAT_RAW_12:
*fmt_type = 12;
break;
case ATOMISP_INPUT_FORMAT_RAW_14:
*fmt_type = 14;
break;
case ATOMISP_INPUT_FORMAT_RAW_16:
*fmt_type = 16;
break;
default:
return -EINVAL;
}
return 0;
}
/*
* This mapping comes from the Arasan CSS function spec
* (CSS_func_spec1.08_ahb_sep29_08.pdf).
*
* MW: For some reason the mapping is not 1-to-1
*/
#if defined(ISP2401)
return ia_css_isys_2401_set_fmt_type(input_format, fmt_type);
#else
return ia_css_isys_2400_set_fmt_type(input_format, fmt_type);
#endif
}
#if defined(ISP2401)
static mipi_predictor_t sh_css_csi2_compression_type_2_mipi_predictor(
......
......@@ -689,7 +689,7 @@ static bool calculate_be_cfg(
cfg->csi_mipi_cfg.comp_scheme = isys_cfg->csi_port_attr.comp_scheme;
cfg->csi_mipi_cfg.comp_predictor = isys_cfg->csi_port_attr.comp_predictor;
cfg->csi_mipi_cfg.comp_bit_idx = cfg->csi_mipi_cfg.data_type -
MIPI_FORMAT_CUSTOM0;
MIPI_FORMAT_2401_CUSTOM0;
}
return true;
......@@ -856,10 +856,10 @@ static csi_mipi_packet_type_t get_csi_mipi_packet_type(
packet_type = CSI_MIPI_PACKET_TYPE_RESERVED;
if (data_type >= 0 && data_type <= MIPI_FORMAT_SHORT8)
if (data_type >= 0 && data_type <= MIPI_FORMAT_2401_SHORT8)
packet_type = CSI_MIPI_PACKET_TYPE_SHORT;
if (data_type > MIPI_FORMAT_SHORT8 && data_type <= N_MIPI_FORMAT)
if (data_type > MIPI_FORMAT_2401_SHORT8 && data_type <= N_MIPI_FORMAT_2401)
packet_type = CSI_MIPI_PACKET_TYPE_LONG;
return packet_type;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment