[PATCH v2 5/5] media: atmel-isc: Rework the format list

Hans Verkuil hverkuil at xs4all.nl
Wed Sep 27 01:03:57 PDT 2017


On 09/27/2017 07:15 AM, Yang, Wenyou wrote:
> Hi Hans,
> 
> Thank  you very much for your review.
> 
> On 2017/9/25 21:24, Hans Verkuil wrote:
>> Hi Wenyou,
>>
>> On 18/09/17 08:39, Wenyou Yang wrote:
>>> To improve the readability of code, split the format array into two,
>>> one for the format description, other for the register configuration.
>>> Meanwhile, add the flag member to indicate the format can be achieved
>>> from the sensor or be produced by the controller, and rename members
>>> related to the register configuration.
>>>
>>> Also add more formats support: GREY, ARGB444, ARGB555 and ARGB32.
>>>
>>> Signed-off-by: Wenyou Yang <wenyou.yang at microchip.com>
>> This looks better. Just a few comments, see below.
>>
>>> ---
>>>
>>> Changes in v2:
>>>   - Add the new patch to remove the unnecessary member from
>>>     isc_subdev_entity struct.
>>>   - Rebase on the patch set,
>>>          [PATCH 0/6] [media] Atmel: Adjustments for seven function implementations
>>>          https://www.mail-archive.com/linux-media@vger.kernel.org/msg118342.html
>>>
>>>   drivers/media/platform/atmel/atmel-isc.c | 524 ++++++++++++++++++++++++-------
>>>   1 file changed, 405 insertions(+), 119 deletions(-)
>>>
>>> diff --git a/drivers/media/platform/atmel/atmel-isc.c b/drivers/media/platform/atmel/atmel-isc.c
>>> index 2d876903da71..90bd0b28a975 100644
>>> --- a/drivers/media/platform/atmel/atmel-isc.c
>>> +++ b/drivers/media/platform/atmel/atmel-isc.c
>>> @@ -89,34 +89,56 @@ struct isc_subdev_entity {
>>>   	struct list_head list;
>>>   };
>>>   
>>> +#define FMT_FLAG_FROM_SENSOR		BIT(0)
>>> +#define FMT_FLAG_FROM_CONTROLLER	BIT(1)
>> Document the meaning of these flags.
> Will add it in next version.
>>
>>> +
>>>   /*
>>>    * struct isc_format - ISC media bus format information
>>>    * @fourcc:		Fourcc code for this format
>>>    * @mbus_code:		V4L2 media bus format code.
>>> + * flags:		Indicate format from sensor or converted by controller
>>>    * @bpp:		Bits per pixel (when stored in memory)
>>> - * @reg_bps:		reg value for bits per sample
>>>    *			(when transferred over a bus)
>>> - * @pipeline:		pipeline switch
>>>    * @sd_support:		Subdev supports this format
>>>    * @isc_support:	ISC can convert raw format to this format
>>>    */
>>> +
>>>   struct isc_format {
>>>   	u32	fourcc;
>>>   	u32	mbus_code;
>>> +	u32	flags;
>>>   	u8	bpp;
>>>   
>>> -	u32	reg_bps;
>>> -	u32	reg_bay_cfg;
>>> -	u32	reg_rlp_mode;
>>> -	u32	reg_dcfg_imode;
>>> -	u32	reg_dctrl_dview;
>>> -
>>> -	u32	pipeline;
>>> -
>>>   	bool	sd_support;
>>>   	bool	isc_support;
>>>   };
>>>   
>>> +/* Pipeline bitmap */
>>> +#define WB_ENABLE	BIT(0)
>>> +#define CFA_ENABLE	BIT(1)
>>> +#define CC_ENABLE	BIT(2)
>>> +#define GAM_ENABLE	BIT(3)
>>> +#define GAM_BENABLE	BIT(4)
>>> +#define GAM_GENABLE	BIT(5)
>>> +#define GAM_RENABLE	BIT(6)
>>> +#define CSC_ENABLE	BIT(7)
>>> +#define CBC_ENABLE	BIT(8)
>>> +#define SUB422_ENABLE	BIT(9)
>>> +#define SUB420_ENABLE	BIT(10)
>>> +
>>> +#define GAM_ENABLES	(GAM_RENABLE | GAM_GENABLE | GAM_BENABLE | GAM_ENABLE)
>>> +
>>> +struct fmt_config {
>>> +	u32	fourcc;
>>> +
>>> +	u32	pfe_cfg0_bps;
>>> +	u32	cfa_baycfg;
>>> +	u32	rlp_cfg_mode;
>>> +	u32	dcfg_imode;
>>> +	u32	dctrl_dview;
>>> +
>>> +	u32	bits_pipeline;
>>> +};
>>>   
>>>   #define HIST_ENTRIES		512
>>>   #define HIST_BAYER		(ISC_HIS_CFG_MODE_B + 1)
>>> @@ -181,80 +203,321 @@ struct isc_device {
>>>   	struct list_head		subdev_entities;
>>>   };
>>>   
>>> -#define RAW_FMT_IND_START    0
>>> -#define RAW_FMT_IND_END      11
>>> -#define ISC_FMT_IND_START    12
>>> -#define ISC_FMT_IND_END      14
>>> -
>>> -static struct isc_format isc_formats[] = {
>>> -	{ V4L2_PIX_FMT_SBGGR8, MEDIA_BUS_FMT_SBGGR8_1X8, 8,
>>> -	  ISC_PFE_CFG0_BPS_EIGHT, ISC_BAY_CFG_BGBG, ISC_RLP_CFG_MODE_DAT8,
>>> -	  ISC_DCFG_IMODE_PACKED8, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> -	{ V4L2_PIX_FMT_SGBRG8, MEDIA_BUS_FMT_SGBRG8_1X8, 8,
>>> -	  ISC_PFE_CFG0_BPS_EIGHT, ISC_BAY_CFG_GBGB, ISC_RLP_CFG_MODE_DAT8,
>>> -	  ISC_DCFG_IMODE_PACKED8, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> -	{ V4L2_PIX_FMT_SGRBG8, MEDIA_BUS_FMT_SGRBG8_1X8, 8,
>>> -	  ISC_PFE_CFG0_BPS_EIGHT, ISC_BAY_CFG_GRGR, ISC_RLP_CFG_MODE_DAT8,
>>> -	  ISC_DCFG_IMODE_PACKED8, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> -	{ V4L2_PIX_FMT_SRGGB8, MEDIA_BUS_FMT_SRGGB8_1X8, 8,
>>> -	  ISC_PFE_CFG0_BPS_EIGHT, ISC_BAY_CFG_RGRG, ISC_RLP_CFG_MODE_DAT8,
>>> -	  ISC_DCFG_IMODE_PACKED8, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> -
>>> -	{ V4L2_PIX_FMT_SBGGR10, MEDIA_BUS_FMT_SBGGR10_1X10, 16,
>>> -	  ISC_PFG_CFG0_BPS_TEN, ISC_BAY_CFG_BGBG, ISC_RLP_CFG_MODE_DAT10,
>>> -	  ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> -	{ V4L2_PIX_FMT_SGBRG10, MEDIA_BUS_FMT_SGBRG10_1X10, 16,
>>> -	  ISC_PFG_CFG0_BPS_TEN, ISC_BAY_CFG_GBGB, ISC_RLP_CFG_MODE_DAT10,
>>> -	  ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> -	{ V4L2_PIX_FMT_SGRBG10, MEDIA_BUS_FMT_SGRBG10_1X10, 16,
>>> -	  ISC_PFG_CFG0_BPS_TEN, ISC_BAY_CFG_GRGR, ISC_RLP_CFG_MODE_DAT10,
>>> -	  ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> -	{ V4L2_PIX_FMT_SRGGB10, MEDIA_BUS_FMT_SRGGB10_1X10, 16,
>>> -	  ISC_PFG_CFG0_BPS_TEN, ISC_BAY_CFG_RGRG, ISC_RLP_CFG_MODE_DAT10,
>>> -	  ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> -
>>> -	{ V4L2_PIX_FMT_SBGGR12, MEDIA_BUS_FMT_SBGGR12_1X12, 16,
>>> -	  ISC_PFG_CFG0_BPS_TWELVE, ISC_BAY_CFG_BGBG, ISC_RLP_CFG_MODE_DAT12,
>>> -	  ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> -	{ V4L2_PIX_FMT_SGBRG12, MEDIA_BUS_FMT_SGBRG12_1X12, 16,
>>> -	  ISC_PFG_CFG0_BPS_TWELVE, ISC_BAY_CFG_GBGB, ISC_RLP_CFG_MODE_DAT12,
>>> -	  ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> -	{ V4L2_PIX_FMT_SGRBG12, MEDIA_BUS_FMT_SGRBG12_1X12, 16,
>>> -	  ISC_PFG_CFG0_BPS_TWELVE, ISC_BAY_CFG_GRGR, ISC_RLP_CFG_MODE_DAT12,
>>> -	  ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> -	{ V4L2_PIX_FMT_SRGGB12, MEDIA_BUS_FMT_SRGGB12_1X12, 16,
>>> -	  ISC_PFG_CFG0_BPS_TWELVE, ISC_BAY_CFG_RGRG, ISC_RLP_CFG_MODE_DAT12,
>>> -	  ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> -
>>> -	{ V4L2_PIX_FMT_YUV420, 0x0, 12,
>>> -	  ISC_PFE_CFG0_BPS_EIGHT, ISC_BAY_CFG_BGBG, ISC_RLP_CFG_MODE_YYCC,
>>> -	  ISC_DCFG_IMODE_YC420P, ISC_DCTRL_DVIEW_PLANAR, 0x7fb,
>>> -	  false, false },
>>> -	{ V4L2_PIX_FMT_YUV422P, 0x0, 16,
>>> -	  ISC_PFE_CFG0_BPS_EIGHT, ISC_BAY_CFG_BGBG, ISC_RLP_CFG_MODE_YYCC,
>>> -	  ISC_DCFG_IMODE_YC422P, ISC_DCTRL_DVIEW_PLANAR, 0x3fb,
>>> -	  false, false },
>>> -	{ V4L2_PIX_FMT_RGB565, MEDIA_BUS_FMT_RGB565_2X8_LE, 16,
>>> -	  ISC_PFE_CFG0_BPS_EIGHT, ISC_BAY_CFG_BGBG, ISC_RLP_CFG_MODE_RGB565,
>>> -	  ISC_DCFG_IMODE_PACKED16, ISC_DCTRL_DVIEW_PACKED, 0x7b,
>>> -	  false, false },
>>> -
>>> -	{ V4L2_PIX_FMT_YUYV, MEDIA_BUS_FMT_YUYV8_2X8, 16,
>>> -	  ISC_PFE_CFG0_BPS_EIGHT, ISC_BAY_CFG_BGBG, ISC_RLP_CFG_MODE_DAT8,
>>> -	  ISC_DCFG_IMODE_PACKED8, ISC_DCTRL_DVIEW_PACKED, 0x0,
>>> -	  false, false },
>>> +#define MAX_RAW_FMT_INDEX	11
>> Do you still need this? The FMT_FLAG_FROM_SENSOR already tells you if it
>> is a raw format or not.
>>
>> As far as I can tell you can drop this define.
> The MAX_RAW_FMT_INDEX is used to get the raw format supported by the sensor.
> Some sensor provide more formats other than the raw format, so the 
> FMT_FLAG_FROM_SENSOR is not enough.

So, add a new flag. The problem with a define like that is that is easily
can get out-of-sync with the array. It's a fragile coding approach.

Regards,

	Hans



More information about the linux-arm-kernel mailing list