1b873663bSTodor Tomov /* SPDX-License-Identifier: GPL-2.0 */ 2ec6859b2STodor Tomov /* 3ec6859b2STodor Tomov * camss-ispif.h 4ec6859b2STodor Tomov * 5ec6859b2STodor Tomov * Qualcomm MSM Camera Subsystem - ISPIF (ISP Interface) Module 6ec6859b2STodor Tomov * 7ec6859b2STodor Tomov * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. 8ec6859b2STodor Tomov * Copyright (C) 2015-2018 Linaro Ltd. 9ec6859b2STodor Tomov */ 10ec6859b2STodor Tomov #ifndef QC_MSM_CAMSS_ISPIF_H 11ec6859b2STodor Tomov #define QC_MSM_CAMSS_ISPIF_H 12ec6859b2STodor Tomov 13ec6859b2STodor Tomov #include <linux/clk.h> 14ec6859b2STodor Tomov #include <media/media-entity.h> 15ec6859b2STodor Tomov #include <media/v4l2-device.h> 16ec6859b2STodor Tomov #include <media/v4l2-subdev.h> 17ec6859b2STodor Tomov 18ec6859b2STodor Tomov #define MSM_ISPIF_PAD_SINK 0 19ec6859b2STodor Tomov #define MSM_ISPIF_PAD_SRC 1 20ec6859b2STodor Tomov #define MSM_ISPIF_PADS_NUM 2 21ec6859b2STodor Tomov 229c3e59deSTodor Tomov #define MSM_ISPIF_VFE_NUM 2 23ec6859b2STodor Tomov 24ec6859b2STodor Tomov enum ispif_intf { 25ec6859b2STodor Tomov PIX0, 26ec6859b2STodor Tomov RDI0, 27ec6859b2STodor Tomov PIX1, 28ec6859b2STodor Tomov RDI1, 29ec6859b2STodor Tomov RDI2 30ec6859b2STodor Tomov }; 31ec6859b2STodor Tomov 32ec6859b2STodor Tomov struct ispif_intf_cmd_reg { 33ec6859b2STodor Tomov u32 cmd_0; 34ec6859b2STodor Tomov u32 cmd_1; 35ec6859b2STodor Tomov }; 36ec6859b2STodor Tomov 37ec6859b2STodor Tomov struct ispif_line { 389c3e59deSTodor Tomov struct ispif_device *ispif; 39ec6859b2STodor Tomov u8 id; 40ec6859b2STodor Tomov u8 csid_id; 41ec6859b2STodor Tomov u8 vfe_id; 42ec6859b2STodor Tomov enum ispif_intf interface; 43ec6859b2STodor Tomov struct v4l2_subdev subdev; 44ec6859b2STodor Tomov struct media_pad pads[MSM_ISPIF_PADS_NUM]; 45ec6859b2STodor Tomov struct v4l2_mbus_framefmt fmt[MSM_ISPIF_PADS_NUM]; 46cba3819dSTodor Tomov const u32 *formats; 47cba3819dSTodor Tomov unsigned int nformats; 48ec6859b2STodor Tomov }; 49ec6859b2STodor Tomov 50ec6859b2STodor Tomov struct ispif_device { 51ec6859b2STodor Tomov void __iomem *base; 52ec6859b2STodor Tomov void __iomem *base_clk_mux; 53ec6859b2STodor Tomov u32 irq; 54ec6859b2STodor Tomov char irq_name[30]; 55ec6859b2STodor Tomov struct camss_clock *clock; 56ec6859b2STodor Tomov int nclocks; 57ec6859b2STodor Tomov struct camss_clock *clock_for_reset; 58ec6859b2STodor Tomov int nclocks_for_reset; 59864ed874SAngeloGioacchino Del Regno struct completion reset_complete[MSM_ISPIF_VFE_NUM]; 60ec6859b2STodor Tomov int power_count; 61ec6859b2STodor Tomov struct mutex power_lock; 62ec6859b2STodor Tomov struct ispif_intf_cmd_reg intf_cmd[MSM_ISPIF_VFE_NUM]; 63ec6859b2STodor Tomov struct mutex config_lock; 649c3e59deSTodor Tomov unsigned int line_num; 659c3e59deSTodor Tomov struct ispif_line *line; 66*9d95baf9SRobert Foss struct camss *camss; 67ec6859b2STodor Tomov }; 68ec6859b2STodor Tomov 69ec6859b2STodor Tomov struct resources_ispif; 70ec6859b2STodor Tomov 71*9d95baf9SRobert Foss int msm_ispif_subdev_init(struct camss *camss, 72ec6859b2STodor Tomov const struct resources_ispif *res); 73ec6859b2STodor Tomov 74ec6859b2STodor Tomov int msm_ispif_register_entities(struct ispif_device *ispif, 75ec6859b2STodor Tomov struct v4l2_device *v4l2_dev); 76ec6859b2STodor Tomov 77ec6859b2STodor Tomov void msm_ispif_unregister_entities(struct ispif_device *ispif); 78ec6859b2STodor Tomov 79ec6859b2STodor Tomov #endif /* QC_MSM_CAMSS_ISPIF_H */ 80