media: rkisp1: Save info pointer in rkisp1_device

To make it possible to use the rkisp1_info after probe time (for
instance to make code conditional on the ISP version), save it in the
main rkisp1_device structure. To achieve this, also move the info
structure into the common header, and document it.

While at it, drop a NULL check in rkisp1_probe() for the match data as
it can't happen.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Dafna Hirschfeld <dafna@fastmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
Paul Elder 2022-06-14 20:10:39 +01:00 committed by Mauro Carvalho Chehab
parent cdce5b957d
commit 9125aee770
2 changed files with 25 additions and 12 deletions

View File

@ -91,6 +91,26 @@ enum rkisp1_isp_pad {
RKISP1_ISP_PAD_MAX
};
/*
* struct rkisp1_info - Model-specific ISP Information
*
* @clks: array of ISP clock names
* @clk_size: number of entries in the @clks array
* @isrs: array of ISP interrupt descriptors
* @isr_size: number of entries in the @isrs array
* @isp_ver: ISP version
*
* This structure contains information about the ISP specific to a particular
* ISP model, version, or integration in a particular SoC.
*/
struct rkisp1_info {
const char * const *clks;
unsigned int clk_size;
const struct rkisp1_isr_data *isrs;
unsigned int isr_size;
enum rkisp1_cif_isp_version isp_ver;
};
/*
* struct rkisp1_sensor_async - A container for the v4l2_async_subdev to add to the notifier
* of the v4l2-async API
@ -386,6 +406,7 @@ struct rkisp1_debug {
* @pipe: media pipeline
* @stream_lock: serializes {start/stop}_streaming callbacks between the capture devices.
* @debug: debug params to be exposed on debugfs
* @info: version-specific ISP information
*/
struct rkisp1_device {
void __iomem *base_addr;
@ -404,6 +425,7 @@ struct rkisp1_device {
struct media_pipeline pipe;
struct mutex stream_lock; /* serialize {start/stop}_streaming cb between capture devices */
struct rkisp1_debug debug;
const struct rkisp1_info *info;
};
/*

View File

@ -105,14 +105,6 @@ struct rkisp1_isr_data {
irqreturn_t (*isr)(int irq, void *ctx);
};
struct rkisp1_info {
const char * const *clks;
unsigned int clk_size;
const struct rkisp1_isr_data *isrs;
unsigned int isr_size;
enum rkisp1_cif_isp_version isp_ver;
};
/* ----------------------------------------------------------------------------
* Sensor DT bindings
*/
@ -469,14 +461,13 @@ static int rkisp1_probe(struct platform_device *pdev)
int ret, irq;
u32 cif_id;
info = of_device_get_match_data(&pdev->dev);
if (!info)
return -ENODEV;
rkisp1 = devm_kzalloc(dev, sizeof(*rkisp1), GFP_KERNEL);
if (!rkisp1)
return -ENOMEM;
info = of_device_get_match_data(dev);
rkisp1->info = info;
dev_set_drvdata(dev, rkisp1);
rkisp1->dev = dev;