1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * Copyright 2021-2022 Bootlin 4 * Author: Paul Kocialkowski <paul.kocialkowski@bootlin.com> 5 */ 6 7#ifndef _SUN6I_ISP_H_ 8#define _SUN6I_ISP_H_ 9 10#include <media/v4l2-device.h> 11#include <media/videobuf2-v4l2.h> 12 13#include "sun6i_isp_capture.h" 14#include "sun6i_isp_params.h" 15#include "sun6i_isp_proc.h" 16 17#define SUN6I_ISP_NAME "sun6i-isp" 18#define SUN6I_ISP_DESCRIPTION "Allwinner A31 ISP Device" 19 20enum sun6i_isp_port { 21 SUN6I_ISP_PORT_CSI0 = 0, 22 SUN6I_ISP_PORT_CSI1 = 1, 23}; 24 25struct sun6i_isp_buffer { 26 struct vb2_v4l2_buffer v4l2_buffer; 27 struct list_head list; 28}; 29 30struct sun6i_isp_v4l2 { 31 struct v4l2_device v4l2_dev; 32 struct media_device media_dev; 33}; 34 35struct sun6i_isp_table { 36 void *data; 37 dma_addr_t address; 38 unsigned int size; 39}; 40 41struct sun6i_isp_tables { 42 struct sun6i_isp_table load; 43 struct sun6i_isp_table save; 44 45 struct sun6i_isp_table lut; 46 struct sun6i_isp_table drc; 47 struct sun6i_isp_table stats; 48}; 49 50struct sun6i_isp_device { 51 struct device *dev; 52 53 struct sun6i_isp_tables tables; 54 55 struct sun6i_isp_v4l2 v4l2; 56 struct sun6i_isp_proc proc; 57 struct sun6i_isp_capture capture; 58 struct sun6i_isp_params params; 59 60 struct regmap *regmap; 61 struct clk *clock_mod; 62 struct clk *clock_ram; 63 struct reset_control *reset; 64 65 spinlock_t state_lock; /* State helpers lock. */ 66}; 67 68struct sun6i_isp_variant { 69 unsigned int table_load_save_size; 70 unsigned int table_lut_size; 71 unsigned int table_drc_size; 72 unsigned int table_stats_size; 73}; 74 75/* Helpers */ 76 77u32 sun6i_isp_load_read(struct sun6i_isp_device *isp_dev, u32 offset); 78void sun6i_isp_load_write(struct sun6i_isp_device *isp_dev, u32 offset, 79 u32 value); 80u32 sun6i_isp_address_value(dma_addr_t address); 81 82/* State */ 83 84void sun6i_isp_state_update(struct sun6i_isp_device *isp_dev, bool ready_hold); 85 86/* Tables */ 87 88void sun6i_isp_tables_configure(struct sun6i_isp_device *isp_dev); 89 90#endif 91