mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-09 17:01:18 -04:00
media: rzg2l-cru: Simplify configuring input format for image processing
Move the `rzg2l_cru_ip_format` struct to `rzg2l-cru.h` for better accessibility and add a `datatype` member to it, allowing the configuration of the ICnMC register based on the MIPI CSI2 data type. Also, move the `rzg2l_cru_ip_code_to_fmt()` function to `rzg2l-cru.h` to streamline format lookup and make it more accessible across the driver. Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Link: https://lore.kernel.org/r/20241018133446.223516-12-prabhakar.mahadev-lad.rj@bp.renesas.com Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
This commit is contained in:
committed by
Hans Verkuil
parent
0e575e4eb6
commit
b56dccafda
@@ -62,6 +62,16 @@ struct rzg2l_cru_ip {
|
||||
struct v4l2_subdev *remote;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rzg2l_cru_ip_format - CRU IP format
|
||||
* @code: Media bus code
|
||||
* @datatype: MIPI CSI2 data type
|
||||
*/
|
||||
struct rzg2l_cru_ip_format {
|
||||
u32 code;
|
||||
u32 datatype;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rzg2l_cru_dev - Renesas CRU device structure
|
||||
* @dev: (OF) device
|
||||
@@ -150,4 +160,6 @@ int rzg2l_cru_ip_subdev_register(struct rzg2l_cru_dev *cru);
|
||||
void rzg2l_cru_ip_subdev_unregister(struct rzg2l_cru_dev *cru);
|
||||
struct v4l2_mbus_framefmt *rzg2l_cru_ip_get_src_fmt(struct rzg2l_cru_dev *cru);
|
||||
|
||||
const struct rzg2l_cru_ip_format *rzg2l_cru_ip_code_to_fmt(unsigned int code);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -6,17 +6,18 @@
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <media/mipi-csi2.h>
|
||||
|
||||
#include "rzg2l-cru.h"
|
||||
|
||||
struct rzg2l_cru_ip_format {
|
||||
u32 code;
|
||||
};
|
||||
|
||||
static const struct rzg2l_cru_ip_format rzg2l_cru_ip_formats[] = {
|
||||
{ .code = MEDIA_BUS_FMT_UYVY8_1X16, },
|
||||
{
|
||||
.code = MEDIA_BUS_FMT_UYVY8_1X16,
|
||||
.datatype = MIPI_CSI2_DT_YUV422_8B,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct rzg2l_cru_ip_format *rzg2l_cru_ip_code_to_fmt(unsigned int code)
|
||||
const struct rzg2l_cru_ip_format *rzg2l_cru_ip_code_to_fmt(unsigned int code)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
|
||||
@@ -301,18 +301,17 @@ static void rzg2l_cru_initialize_axi(struct rzg2l_cru_dev *cru)
|
||||
}
|
||||
|
||||
static void rzg2l_cru_csi2_setup(struct rzg2l_cru_dev *cru, bool *input_is_yuv,
|
||||
struct v4l2_mbus_framefmt *ip_sd_fmt, u8 csi_vc)
|
||||
const struct rzg2l_cru_ip_format *ip_fmt,
|
||||
u8 csi_vc)
|
||||
{
|
||||
u32 icnmc;
|
||||
u32 icnmc = ICnMC_INF(ip_fmt->datatype);
|
||||
|
||||
switch (ip_sd_fmt->code) {
|
||||
switch (ip_fmt->code) {
|
||||
case MEDIA_BUS_FMT_UYVY8_1X16:
|
||||
icnmc = ICnMC_INF(MIPI_CSI2_DT_YUV422_8B);
|
||||
*input_is_yuv = true;
|
||||
break;
|
||||
default:
|
||||
*input_is_yuv = false;
|
||||
icnmc = ICnMC_INF(MIPI_CSI2_DT_USER_DEFINED(0));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -328,11 +327,13 @@ static int rzg2l_cru_initialize_image_conv(struct rzg2l_cru_dev *cru,
|
||||
struct v4l2_mbus_framefmt *ip_sd_fmt,
|
||||
u8 csi_vc)
|
||||
{
|
||||
const struct rzg2l_cru_ip_format *cru_ip_fmt;
|
||||
bool output_is_yuv = false;
|
||||
bool input_is_yuv = false;
|
||||
u32 icndmr;
|
||||
|
||||
rzg2l_cru_csi2_setup(cru, &input_is_yuv, ip_sd_fmt, csi_vc);
|
||||
cru_ip_fmt = rzg2l_cru_ip_code_to_fmt(ip_sd_fmt->code);
|
||||
rzg2l_cru_csi2_setup(cru, &input_is_yuv, cru_ip_fmt, csi_vc);
|
||||
|
||||
/* Output format */
|
||||
switch (cru->format.pixelformat) {
|
||||
|
||||
Reference in New Issue
Block a user