Files
linux-nv-oot/include/uapi/media/camera_device.h
Frank Chen 92ac7bc35a media: camera: Build tegra-camera as OOT module
Port camera drivers below from /kenrel/nvidia to
/kernel/nvidia-oot as OOT modules:
- Fusa-capture driver
- Tegra V4L2 framework driver
- vi/csi driver
- tegra camera platform driver

Change-Id: I390af27096425bb11e0934201dd1a90f001bb3fa
Signed-off-by: Frank Chen <frankc@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2780698
Reviewed-by: FNU Raunak <fraunak@nvidia.com>
Reviewed-by: Ankur Pawar <ankurp@nvidia.com>
Reviewed-by: Shiva Dubey <sdubey@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
2022-12-13 06:15:42 -08:00

120 lines
2.2 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* camera device driver header
*
* Copyright (c) 2018-2022 NVIDIA Corporation. All rights reserved.
*/
#ifndef __UAPI_CAMERA_DEVICE_H_
#define __UAPI_CAMERA_DEVICE_H_
#include <linux/types.h>
#include <linux/ioctl.h>
#define __CAMERA_DEVICE_ALIGN __aligned(8)
/* Sensor, focuser, iris etc., */
#define MAX_DEVICES_PER_CHANNEL 4
/*
* Increasing below values must validate
* copy_from or copy_to works properly
*/
#define MAX_COMMANDS 256
#define MAX_BLOB_SIZE 2048
struct i2c_bus {
__u32 reg_base;
__u32 clk_rate;
__u32 flags;
__u8 reserved[4];
};
struct i2c_mux {
bool is_mux_valid;
__u8 mux_channel;
__u16 mux_addr;
__u8 reserved[4];
};
struct i2c_dev {
__u16 addr;
__u8 pad[2];
__u32 flags;
};
struct spi_bus {
__u32 reg_base;
__u32 clk_rate;
__u32 flags;
__u8 reserved[4];
};
struct spi_dev {
__u8 port;
__u16 addr;
__u8 pad;
__u32 flags;
__u8 pad1[4];
};
struct i2c_sensor_cfg {
__u32 num_devs;
struct i2c_bus bus;
struct i2c_mux mux;
struct i2c_dev sd[MAX_DEVICES_PER_CHANNEL];
};
struct spi_sensor_cfg {
__u32 num_devs;
struct spi_bus bus;
struct spi_dev sd[MAX_DEVICES_PER_CHANNEL];
};
struct sensor_cfg {
__u8 type; /* SPI or I2C */
__u8 pad[3]; /* for alignment */
union {
struct i2c_sensor_cfg i2c_sensor;
struct spi_sensor_cfg spi_sensor;
} u;
} __CAMERA_DEVICE_ALIGN;
struct sensor_cmd {
__u32 opcode;
__u32 addr;
};
struct sensor_blob {
__u32 num_cmds;
__u32 buf_size;
struct sensor_cmd cmds[MAX_COMMANDS];
__u8 buf[MAX_BLOB_SIZE];
} __CAMERA_DEVICE_ALIGN;
struct sensor_blob_cfg {
__u32 nlines;
struct sensor_blob *blob;
} __CAMERA_DEVICE_ALIGN;
#define CAMERA_DEVICE_NONE 0
#define CAMERA_DEVICE_I2C_SENSOR (0x1 << 1)
#define CAMERA_DEVICE_SPI_SENSOR (0x1 << 2)
/* Future extensions - if necessary */
#define CAMERA_DEVICE_VI (0x1 << 8)
#define CAMERA_DEVICE_CSI (0x1 << 9)
#define CAMERA_DEVICE_ISP (0x1 << 16)
struct camdev_chan_cfg {
__u32 type;
struct sensor_cfg scfg;
} __CAMERA_DEVICE_ALIGN;
/* common functionality */
#define CAMERA_DEVICE_REGISTER _IOW('C', 1, struct camdev_chan_cfg)
#define CAMERA_DEVICE_UNREGISTER _IOW('C', 2, __u32)
/* sensor functionality */
#define SENSOR_BLOB_EXECUTE _IOW('C', 10, struct sensor_blob_cfg)
#endif