18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * camss-ispif.h
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Qualcomm MSM Camera Subsystem - ISPIF (ISP Interface) Module
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
88c2ecf20Sopenharmony_ci * Copyright (C) 2015-2018 Linaro Ltd.
98c2ecf20Sopenharmony_ci */
108c2ecf20Sopenharmony_ci#ifndef QC_MSM_CAMSS_ISPIF_H
118c2ecf20Sopenharmony_ci#define QC_MSM_CAMSS_ISPIF_H
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#include <linux/clk.h>
148c2ecf20Sopenharmony_ci#include <media/media-entity.h>
158c2ecf20Sopenharmony_ci#include <media/v4l2-device.h>
168c2ecf20Sopenharmony_ci#include <media/v4l2-subdev.h>
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci#define MSM_ISPIF_PAD_SINK 0
198c2ecf20Sopenharmony_ci#define MSM_ISPIF_PAD_SRC 1
208c2ecf20Sopenharmony_ci#define MSM_ISPIF_PADS_NUM 2
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci#define MSM_ISPIF_VFE_NUM 2
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_cienum ispif_intf {
258c2ecf20Sopenharmony_ci	PIX0,
268c2ecf20Sopenharmony_ci	RDI0,
278c2ecf20Sopenharmony_ci	PIX1,
288c2ecf20Sopenharmony_ci	RDI1,
298c2ecf20Sopenharmony_ci	RDI2
308c2ecf20Sopenharmony_ci};
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_cistruct ispif_intf_cmd_reg {
338c2ecf20Sopenharmony_ci	u32 cmd_0;
348c2ecf20Sopenharmony_ci	u32 cmd_1;
358c2ecf20Sopenharmony_ci};
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_cistruct ispif_line {
388c2ecf20Sopenharmony_ci	struct ispif_device *ispif;
398c2ecf20Sopenharmony_ci	u8 id;
408c2ecf20Sopenharmony_ci	u8 csid_id;
418c2ecf20Sopenharmony_ci	u8 vfe_id;
428c2ecf20Sopenharmony_ci	enum ispif_intf interface;
438c2ecf20Sopenharmony_ci	struct v4l2_subdev subdev;
448c2ecf20Sopenharmony_ci	struct media_pad pads[MSM_ISPIF_PADS_NUM];
458c2ecf20Sopenharmony_ci	struct v4l2_mbus_framefmt fmt[MSM_ISPIF_PADS_NUM];
468c2ecf20Sopenharmony_ci	const u32 *formats;
478c2ecf20Sopenharmony_ci	unsigned int nformats;
488c2ecf20Sopenharmony_ci};
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_cistruct ispif_device {
518c2ecf20Sopenharmony_ci	void __iomem *base;
528c2ecf20Sopenharmony_ci	void __iomem *base_clk_mux;
538c2ecf20Sopenharmony_ci	u32 irq;
548c2ecf20Sopenharmony_ci	char irq_name[30];
558c2ecf20Sopenharmony_ci	struct camss_clock *clock;
568c2ecf20Sopenharmony_ci	int nclocks;
578c2ecf20Sopenharmony_ci	struct camss_clock  *clock_for_reset;
588c2ecf20Sopenharmony_ci	int nclocks_for_reset;
598c2ecf20Sopenharmony_ci	struct completion reset_complete;
608c2ecf20Sopenharmony_ci	int power_count;
618c2ecf20Sopenharmony_ci	struct mutex power_lock;
628c2ecf20Sopenharmony_ci	struct ispif_intf_cmd_reg intf_cmd[MSM_ISPIF_VFE_NUM];
638c2ecf20Sopenharmony_ci	struct mutex config_lock;
648c2ecf20Sopenharmony_ci	unsigned int line_num;
658c2ecf20Sopenharmony_ci	struct ispif_line *line;
668c2ecf20Sopenharmony_ci};
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_cistruct resources_ispif;
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_ciint msm_ispif_subdev_init(struct ispif_device *ispif,
718c2ecf20Sopenharmony_ci			  const struct resources_ispif *res);
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ciint msm_ispif_register_entities(struct ispif_device *ispif,
748c2ecf20Sopenharmony_ci				struct v4l2_device *v4l2_dev);
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_civoid msm_ispif_unregister_entities(struct ispif_device *ispif);
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_ci#endif /* QC_MSM_CAMSS_ISPIF_H */
79