| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * Copyright (C) 2021-2023 Digiteq Automotive |
| * author: Martin Tuma <martin.tuma@digiteqautomotive.com> |
| */ |
| |
| #ifndef __MGB4_VIN_H__ |
| #define __MGB4_VIN_H__ |
| |
| #include <media/v4l2-device.h> |
| #include <media/v4l2-dev.h> |
| #include <media/v4l2-ctrls.h> |
| #include <media/videobuf2-core.h> |
| #include <linux/debugfs.h> |
| #include "mgb4_i2c.h" |
| |
| struct mgb4_vin_regs { |
| u32 address; |
| u32 config; |
| u32 status; |
| u32 resolution; |
| u32 frame_period; |
| u32 sync; |
| u32 pclk; |
| u32 signal; |
| u32 signal2; |
| u32 padding; |
| u32 timer; |
| }; |
| |
| struct mgb4_vin_config { |
| int id; |
| int dma_channel; |
| int vin_irq; |
| int err_irq; |
| struct mgb4_vin_regs regs; |
| }; |
| |
| struct mgb4_vin_dev { |
| struct mgb4_dev *mgbdev; |
| struct v4l2_device v4l2dev; |
| struct video_device vdev; |
| struct vb2_queue queue; |
| struct mutex lock; /* vdev lock */ |
| |
| spinlock_t qlock; /* video buffer queue lock */ |
| struct list_head buf_list; |
| struct work_struct dma_work, err_work; |
| |
| unsigned int sequence; |
| |
| struct v4l2_dv_timings timings; |
| u32 freq_range; |
| u32 padding; |
| |
| struct mgb4_i2c_client deser; |
| |
| const struct mgb4_vin_config *config; |
| |
| #ifdef CONFIG_DEBUG_FS |
| struct dentry *debugfs; |
| struct debugfs_regset32 regset; |
| struct debugfs_reg32 regs[sizeof(struct mgb4_vin_regs) / 4]; |
| #endif |
| }; |
| |
| struct mgb4_vin_dev *mgb4_vin_create(struct mgb4_dev *mgbdev, int id); |
| void mgb4_vin_free(struct mgb4_vin_dev *vindev); |
| |
| #endif |