| /* SPDX-License-Identifier: GPL-2.0+ */ |
| /* |
| * Copyright 2021-2022 Bootlin |
| * Author: Paul Kocialkowski <paul.kocialkowski@bootlin.com> |
| */ |
| |
| #ifndef _SUN6I_ISP_H_ |
| #define _SUN6I_ISP_H_ |
| |
| #include <media/v4l2-device.h> |
| #include <media/videobuf2-v4l2.h> |
| |
| #include "sun6i_isp_capture.h" |
| #include "sun6i_isp_params.h" |
| #include "sun6i_isp_proc.h" |
| |
| #define SUN6I_ISP_NAME "sun6i-isp" |
| #define SUN6I_ISP_DESCRIPTION "Allwinner A31 ISP Device" |
| |
| enum sun6i_isp_port { |
| SUN6I_ISP_PORT_CSI0 = 0, |
| SUN6I_ISP_PORT_CSI1 = 1, |
| }; |
| |
| struct sun6i_isp_buffer { |
| struct vb2_v4l2_buffer v4l2_buffer; |
| struct list_head list; |
| }; |
| |
| struct sun6i_isp_v4l2 { |
| struct v4l2_device v4l2_dev; |
| struct media_device media_dev; |
| }; |
| |
| struct sun6i_isp_table { |
| void *data; |
| dma_addr_t address; |
| unsigned int size; |
| }; |
| |
| struct sun6i_isp_tables { |
| struct sun6i_isp_table load; |
| struct sun6i_isp_table save; |
| |
| struct sun6i_isp_table lut; |
| struct sun6i_isp_table drc; |
| struct sun6i_isp_table stats; |
| }; |
| |
| struct sun6i_isp_device { |
| struct device *dev; |
| |
| struct sun6i_isp_tables tables; |
| |
| struct sun6i_isp_v4l2 v4l2; |
| struct sun6i_isp_proc proc; |
| struct sun6i_isp_capture capture; |
| struct sun6i_isp_params params; |
| |
| struct regmap *regmap; |
| struct clk *clock_mod; |
| struct clk *clock_ram; |
| struct reset_control *reset; |
| |
| spinlock_t state_lock; /* State helpers lock. */ |
| }; |
| |
| struct sun6i_isp_variant { |
| unsigned int table_load_save_size; |
| unsigned int table_lut_size; |
| unsigned int table_drc_size; |
| unsigned int table_stats_size; |
| }; |
| |
| /* Helpers */ |
| |
| u32 sun6i_isp_load_read(struct sun6i_isp_device *isp_dev, u32 offset); |
| void sun6i_isp_load_write(struct sun6i_isp_device *isp_dev, u32 offset, |
| u32 value); |
| u32 sun6i_isp_address_value(dma_addr_t address); |
| |
| /* State */ |
| |
| void sun6i_isp_state_update(struct sun6i_isp_device *isp_dev, bool ready_hold); |
| |
| /* Tables */ |
| |
| void sun6i_isp_tables_configure(struct sun6i_isp_device *isp_dev); |
| |
| #endif |