Merge commit 'e57205222fd61a41a8c45da3e43083d4f55756ee'

* commit 'e57205222fd61a41a8c45da3e43083d4f55756ee':
  media: rockchip: vicap used yuv packet fmt to capture rgb888
  arm64: dts: rockchip: rv1126bp: Add usb2 drd node
  media: rockchip: vicap fixes sof not increase after loss frame
  media: i2c: ox03c10 support set cmps mode
  include: uapi: rk-camera-module.h add RKMODULE_SET_CMPS_MODE
  media: i2c: ox03c10 support record wbgain before streaming
  media: i2c: ox03c10 support get wbgain/blc info
  include: uapi: rk-camera-module.h add RKMODULE_GET_WB_GAIN_INFO/RKMODULE_GET_BLC_INFO
  media: i2c: ox03c10 modify gain range
  media: i2c: ox03c10 support linear raw10
  media: i2c: os12d40 support 2256x1256@30fps
  media: rockchip: vicap fixes error of destroy dummy buffer
  arm64: dts: rockchip: rv1126b-evb-dual-cam-csi0: sc450ai support sync mode
  media: i2c: sc450ai support sync mode
  arm64: dts: rockchip: rv1126b-evb-dual-cam-csi0: fixes error of compilation
  ARM: configs: rv1126b-tb: Build in RKNPU
  arm64: dts: rockchip: rv1126bp-evb-v14 enable rkfec and rkavsp
  mfd: rk806: Solve the problem of directly accessing the bus before it's fully restored

Change-Id: Idda9b9f64b11d70b07ec813187659b663f373ce6
This commit is contained in:
Tao Huang
2025-06-20 21:21:18 +08:00
13 changed files with 2358 additions and 117 deletions

View File

@@ -20,6 +20,7 @@ CONFIG_ROCKCHIP_HW_DECOMPRESS=y
CONFIG_ROCKCHIP_MULTI_RGA=y
CONFIG_ROCKCHIP_RAMDISK=y
CONFIG_ROCKCHIP_RGA_PROC_FS=y
CONFIG_ROCKCHIP_RKNPU=y
CONFIG_ROCKCHIP_THUNDER_BOOT=y
CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK=y
CONFIG_ROCKCHIP_VENDOR_STORAGE=y
@@ -293,6 +294,8 @@ CONFIG_MMC_QUEUE_DEPTH=1
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_TEST is not set
# CONFIG_MMC_USDHI6ROL0 is not set
# CONFIG_MMC_USHC is not set
# CONFIG_MMC_VUB300 is not set
# CONFIG_MOXTET is not set
# CONFIG_MPL115_SPI is not set
CONFIG_MTD_BLKDEVS=y
@@ -450,6 +453,8 @@ CONFIG_SPI_ROCKCHIP_SFC=y
# CONFIG_TI_DAC7612 is not set
# CONFIG_TI_TLC4541 is not set
# CONFIG_TI_TSC2046 is not set
# CONFIG_USB_MAX3420_UDC is not set
# CONFIG_USB_MAX3421_HCD is not set
# CONFIG_VIDEO_GS1662 is not set
# CONFIG_VIDEO_ROCKCHIP_PREISP is not set
CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_ISP=y

View File

@@ -92,6 +92,7 @@
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "default";
rockchip,camera-module-lens-name = "default";
rockchip,camera-module-sync-mode = "internal_master";
port {
sc450ai_1_out: endpoint {
remote-endpoint = <&csi_dphy2_input0>;
@@ -114,6 +115,7 @@
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "default";
rockchip,camera-module-lens-name = "default";
rockchip,camera-module-sync-mode = "external_master";
port {
sc450ai_2_out: endpoint {
remote-endpoint = <&csi_dphy1_input0>;
@@ -258,7 +260,7 @@
&rkisp_vir0_sditf {
status = "okay";
}
};
&rkisp_vir1 {
status = "okay";

View File

@@ -486,6 +486,22 @@
status = "okay";
};
&rkavsp {
status = "okay";
};
&rkavsp_mmu {
status = "okay";
};
&rkfec {
status = "okay";
};
&rkfec_mmu {
status = "okay";
};
&rknpu {
rknpu-supply = <&vdd_npu>;
};

View File

@@ -7,3 +7,12 @@
/ {
};
&usb_drd_dwc3 {
phys = <&usb2phy_otg>;
phy-names = "usb2-phy";
maximum-speed = "high-speed";
snps,dis_u2_susphy_quirk;
snps,usb2-lpm-disable;
snps,usb2-gadget-lpm-disable;
};

View File

@@ -98,7 +98,6 @@
#define OF_CAMERA_PINCTRL_STATE_SLEEP "rockchip,camera_sleep"
#define OS12D40_NAME "os12d40"
#define OS12D40_MEDIA_BUS_FMT MEDIA_BUS_FMT_SBGGR10_1X10
#define USE_4_CELL (1)
@@ -127,6 +126,7 @@ struct regval {
};
struct os12d40_mode {
u32 bus_fmt;
u32 width;
u32 height;
struct v4l2_fract max_fps;
@@ -1129,9 +1129,823 @@ static const struct regval os12d40_4512x2512_regs_4lane[] = {
{REG_NULL, 0x00},
};
static const struct regval os12d40_2256x1256_regs_4lane[] = {
// Sysclk 90Mhz, MIPI4_996Mbps/Lane, 30Fps.
//Line_length =1080, Frame_length =2776
{0x0103, 0x01},
{0x0301, 0x80},
{0x0302, 0x01},
{0x0304, 0x01},
{0x0305, 0xf0},
{0x0306, 0x04},
{0x0307, 0x01},
{0x0309, 0x00},
{0x0320, 0x20},
{0x0324, 0x01},
{0x0325, 0xc2},
{0x0326, 0xd3},
{0x032b, 0x06},
{0x0344, 0x01},
{0x0345, 0xb8},
{0x0346, 0xcb},
{0x0350, 0x02},
{0x0360, 0x09},
{0x3002, 0x80},
{0x300d, 0x11},
{0x300e, 0x11},
{0x3012, 0x41},
{0x3016, 0xf0},
{0x3017, 0xd0},
{0x3018, 0xf0},
{0x3019, 0xc2},
{0x301a, 0xf0},
{0x301b, 0x34},
{0x301c, 0x91},
{0x301d, 0x02},
{0x301e, 0x98},
{0x301f, 0x21},
{0x3022, 0xf0},
{0x3027, 0x2e},
{0x302c, 0x01},
{0x302d, 0x00},
{0x302e, 0x00},
{0x302f, 0x00},
{0x3030, 0x03},
{0x3044, 0xc2},
{0x304b, 0x00},
{0x30d4, 0x00},
{0x3209, 0x00},
{0x320a, 0x00},
{0x320b, 0x00},
{0x320c, 0x00},
{0x320d, 0x01},
{0x3216, 0x01},
{0x3218, 0x80},
{0x33c0, 0x00},
{0x33c3, 0x00},
{0x33c4, 0x00},
{0x3400, 0x04},
{0x3408, 0x05},
{0x340c, 0x10},
{0x340e, 0x30},
{0x3421, 0x08},
{0x3422, 0x00},
{0x3423, 0x15},
{0x3424, 0x40},
{0x3425, 0x10},
{0x3426, 0x20},
{0x3500, 0x00},
{0x3501, 0x05},
{0x3502, 0x60},
{0x3504, 0x08},
{0x3508, 0x01},
{0x3509, 0x00},
{0x350a, 0x01},
{0x350b, 0x00},
{0x350c, 0x00},
{0x350e, 0x00},
{0x3510, 0x01},
{0x3511, 0x00},
{0x3512, 0x00},
{0x3513, 0x01},
{0x3514, 0x00},
{0x3515, 0x00},
{0x3516, 0x01},
{0x3517, 0x00},
{0x3518, 0x00},
{0x352d, 0x00},
{0x352e, 0x00},
{0x352f, 0x00},
{0x3541, 0x00},
{0x3542, 0x40},
{0x3548, 0x01},
{0x3549, 0x00},
{0x354a, 0x01},
{0x354b, 0x00},
{0x354c, 0x00},
{0x354e, 0x00},
{0x3550, 0x01},
{0x3551, 0x00},
{0x3552, 0x00},
{0x3581, 0x00},
{0x3582, 0x40},
{0x3588, 0x01},
{0x3589, 0x00},
{0x358a, 0x01},
{0x358b, 0x00},
{0x358c, 0x00},
{0x3590, 0x01},
{0x3591, 0x00},
{0x3592, 0x00},
{0x3610, 0x80},
{0x3615, 0x27},
{0x3617, 0x5a},
{0x3624, 0x88},
{0x3628, 0x77},
{0x3644, 0x20},
{0x3652, 0x00},
{0x3653, 0x00},
{0x3663, 0x6b},
{0x3660, 0x4f},
{0x3661, 0xd0},
{0x3662, 0x09},
{0x3680, 0xc1},
{0x3683, 0x80},
{0x3684, 0x03},
{0x3685, 0x52},
{0x3687, 0xd2},
{0x3689, 0x27},
{0x368a, 0x38},
{0x368b, 0x08},
{0x368c, 0x06},
{0x368e, 0x00},
{0x3692, 0x00},
{0x3693, 0x00},
{0x3696, 0x26},
{0x3697, 0x1f},
{0x3698, 0x1d},
{0x3699, 0x59},
{0x369a, 0x01},
{0x369b, 0x20},
{0x3700, 0x2e},
{0x3701, 0x06},
{0x3702, 0x4f},
{0x3703, 0x28},
{0x3704, 0x07},
{0x3705, 0x00},
{0x3706, 0x2f},
{0x3707, 0x08},
{0x3708, 0x2d},
{0x3709, 0x5d},
{0x370a, 0x00},
{0x370b, 0x69},
{0x370c, 0x0c},
{0x3711, 0x30},
{0x3712, 0x00},
{0x3713, 0x00},
{0x3714, 0x63},
{0x371a, 0x1c},
{0x371b, 0xd0},
{0x371c, 0x04},
{0x371d, 0x24},
{0x371e, 0x13},
{0x371f, 0x0c},
{0x3720, 0x08},
{0x3721, 0x15},
{0x3724, 0x08},
{0x3725, 0x32},
{0x3727, 0x22},
{0x3728, 0x11},
{0x3729, 0x00},
{0x372a, 0x00},
{0x372b, 0x00},
{0x3752, 0x02},
{0x3753, 0x03},
{0x3754, 0xee},
{0x3760, 0x04},
{0x3761, 0x14},
{0x3762, 0x04},
{0x3765, 0x08},
{0x3766, 0x0c},
{0x3767, 0x00},
{0x376a, 0x00},
{0x376b, 0x00},
{0x376d, 0x1b},
{0x376f, 0x02},
{0x37d9, 0x08},
{0x37f6, 0x07},
{0x37f7, 0x04},
{0x37f8, 0x2d},
{0x37f9, 0x02},
{0x37fa, 0x02},
{0x37fb, 0x02},
{0x3800, 0x00},
{0x3801, 0x00},
{0x3802, 0x00},
{0x3803, 0x40},
{0x3804, 0x12},
{0x3805, 0x1f},
{0x3806, 0x0a},
{0x3807, 0x1f},
{0x3808, 0x08},
{0x3809, 0xd0},
{0x380a, 0x04},
{0x380b, 0xe8},
{0x380c, 0x04},
{0x380d, 0x38},
{0x380e, 0x0a},
{0x380f, 0xd8},
{0x3810, 0x00},
{0x3811, 0x21},
{0x3812, 0x00},
{0x3813, 0x04},
{0x3814, 0x22},
{0x3815, 0x22},
{0x381a, 0x00},
{0x381b, 0x01},
{0x381e, 0x00},
{0x381f, 0x02},
{0x3820, 0x01},
{0x3821, 0x0d},
{0x3822, 0x00},
{0x3823, 0x04},
{0x3824, 0x00},
{0x3825, 0x00},
{0x3826, 0x00},
{0x3827, 0x64},
{0x3828, 0xf7},
{0x382a, 0x83},
{0x382c, 0x00},
{0x382d, 0x00},
{0x3835, 0x00},
{0x3836, 0x00},
{0x3837, 0x08},
{0x3839, 0x00},
{0x383b, 0x00},
{0x383c, 0x00},
{0x383d, 0x08},
{0x383e, 0x00},
{0x383f, 0x33},
{0x3842, 0x00},
{0x3856, 0x00},
{0x3857, 0x08},
{0x3858, 0x00},
{0x3859, 0x10},
{0x3865, 0x70},
{0x3867, 0x08},
{0x3868, 0x00},
{0x3904, 0x33},
{0x3907, 0x33},
{0x390a, 0x9a},
{0x3914, 0x34},
{0x3938, 0x4b},
{0x3939, 0x0c},
{0x393b, 0x4b},
{0x393c, 0x0c},
{0x393e, 0x40},
{0x393f, 0x0c},
{0x394a, 0x01},
{0x394b, 0xa5},
{0x3975, 0x05},
{0x3979, 0x32},
{0x397d, 0x69},
{0x3981, 0x15},
{0x3983, 0x33},
{0x3985, 0x1a},
{0x3986, 0x08},
{0x398a, 0x09},
{0x39cd, 0x00},
{0x39ce, 0x24},
{0x39cf, 0x40},
{0x39d0, 0x0a},
{0x39d1, 0x50},
{0x39d2, 0x05},
{0x39d3, 0x94},
{0x39d4, 0x01},
{0x39d5, 0x79},
{0x3a12, 0x00},
{0x3a13, 0x00},
{0x3a14, 0x00},
{0x3a15, 0x00},
{0x3a16, 0x00},
{0x3a18, 0x04},
{0x3a1a, 0x05},
{0x3a1c, 0x0a},
{0x3a1e, 0x03},
{0x3a1f, 0x34},
{0x3a22, 0x12},
{0x3a24, 0x00},
{0x3a25, 0xfe},
{0x3a26, 0x01},
{0x3a27, 0x01},
{0x3a2a, 0xa8},
{0x3a2b, 0xa8},
{0x3a36, 0x00},
{0x3d84, 0x00},
{0x3d85, 0x1b},
{0x3d88, 0x00},
{0x3d89, 0x00},
{0x3d8a, 0x03},
{0x3d8b, 0xff},
{0x3d8c, 0xa3},
{0x3d8d, 0xc4},
{0x3da4, 0x04},
{0x3daa, 0xa0},
{0x3dab, 0x10},
{0x3dac, 0xa1},
{0x3dad, 0x8c},
{0x3dae, 0xa1},
{0x3daf, 0xb3},
{0x3e00, 0x0e},
{0x3e01, 0x0e},
{0x3e02, 0x0e},
{0x3e03, 0x0e},
{0x3e04, 0x0e},
{0x3e05, 0x0e},
{0x3e06, 0x0e},
{0x3e07, 0x0e},
{0x3e09, 0x47},
{0x3e0b, 0x25},
{0x3e0d, 0x13},
{0x3e0f, 0x09},
{0x3e11, 0x07},
{0x3e13, 0x06},
{0x3e15, 0x05},
{0x3e17, 0x04},
{0x3e18, 0x38},
{0x3e19, 0x38},
{0x3e1a, 0x13},
{0x3e1b, 0x30},
{0x3e1c, 0x07},
{0x3e1d, 0x06},
{0x3e1e, 0x05},
{0x3e1f, 0x04},
{0x3e20, 0x0f},
{0x3e21, 0x0f},
{0x3e22, 0x0f},
{0x3e23, 0x0f},
{0x3e24, 0x0f},
{0x3e25, 0x0f},
{0x3e26, 0x0f},
{0x3e27, 0x0f},
{0x3e28, 0x07},
{0x3e29, 0x07},
{0x3e2a, 0x07},
{0x3e2b, 0x02},
{0x3e2c, 0x07},
{0x3e2d, 0x07},
{0x3e30, 0x07},
{0x3e3a, 0x02},
{0x3e3b, 0xdf},
{0x3e3c, 0xff},
{0x3e3d, 0x44},
{0x3e3e, 0x00},
{0x3e3f, 0x00},
{0x3e40, 0xc1},
{0x3e42, 0x54},
{0x3e43, 0x54},
{0x3e44, 0x54},
{0x3e45, 0x54},
{0x3f00, 0x10},
{0x3f01, 0x26},
{0x3f03, 0x40},
{0x4002, 0xf3},
{0x4009, 0x02},
{0x400e, 0xc6},
{0x400f, 0x00},
{0x4010, 0x28},
{0x4011, 0x01},
{0x4012, 0x0d},
{0x4015, 0x02},
{0x4016, 0x11},
{0x4017, 0x00},
{0x4018, 0x03},
{0x401a, 0x40},
{0x401e, 0x00},
{0x401f, 0xcc},
{0x4020, 0x04},
{0x4021, 0x00},
{0x4022, 0x04},
{0x4023, 0x00},
{0x4024, 0x04},
{0x4025, 0x00},
{0x4026, 0x04},
{0x4027, 0x00},
{0x4028, 0x01},
{0x4030, 0x00},
{0x4031, 0x10},
{0x4032, 0x00},
{0x4033, 0x10},
{0x4034, 0x08},
{0x4035, 0x10},
{0x4036, 0x08},
{0x4037, 0x10},
{0x4040, 0x08},
{0x4041, 0x10},
{0x4042, 0x08},
{0x4043, 0x10},
{0x4044, 0x00},
{0x4045, 0x10},
{0x4046, 0x00},
{0x4047, 0x10},
{0x4050, 0x00},
{0x4051, 0x00},
{0x4056, 0x25},
{0x4102, 0xf3},
{0x4109, 0x02},
{0x410e, 0xc6},
{0x410f, 0x00},
{0x4110, 0x28},
{0x4111, 0x01},
{0x4112, 0x0d},
{0x4115, 0x04},
{0x4116, 0x1b},
{0x4117, 0x00},
{0x4118, 0x07},
{0x411a, 0x40},
{0x411e, 0x00},
{0x411f, 0xcc},
{0x4128, 0x01},
{0x4156, 0x25},
{0x4702, 0xf3},
{0x4709, 0x02},
{0x470e, 0xc6},
{0x470f, 0x00},
{0x4710, 0x28},
{0x4711, 0x01},
{0x4712, 0x0d},
{0x4715, 0x04},
{0x4716, 0x1b},
{0x4717, 0x00},
{0x4718, 0x07},
{0x471a, 0x40},
{0x471e, 0x00},
{0x471f, 0xcc},
{0x4728, 0x01},
{0x4756, 0x25},
{0x4301, 0x00},
{0x4303, 0x00},
{0x4305, 0x00},
{0x4307, 0x00},
{0x4308, 0x00},
{0x430b, 0xff},
{0x430d, 0x00},
{0x430e, 0x00},
{0x4503, 0x0f},
{0x4504, 0x82},
{0x4508, 0x00},
{0x451d, 0x00},
{0x451e, 0x00},
{0x451f, 0x00},
{0x4523, 0x00},
{0x4526, 0x00},
{0x4527, 0x00},
{0x4530, 0x00},
{0x4547, 0x06},
{0x4640, 0x00},
{0x4641, 0x30},
{0x4643, 0x00},
{0x4645, 0x13},
{0x464a, 0x00},
{0x464b, 0x30},
{0x4680, 0x00},
{0x4681, 0x24},
{0x4683, 0x0c},
{0x4800, 0x64},
{0x480b, 0x10},
{0x480c, 0x80},
{0x480e, 0x04},
{0x480f, 0x32},
{0x4826, 0x32},
{0x4833, 0x18},
{0x4837, 0x10},
{0x484b, 0x27},
{0x4850, 0x47},
{0x4853, 0x04},
{0x4860, 0x00},
{0x4861, 0xec},
{0x4862, 0x04},
{0x4883, 0x00},
{0x4885, 0x10},
{0x4888, 0x10},
{0x4889, 0x03},
{0x4d00, 0x04},
{0x4d01, 0x8f},
{0x4d02, 0xb9},
{0x4d03, 0xc1},
{0x4d04, 0xb6},
{0x4d05, 0x7e},
{0x5000, 0xeb},
{0x5001, 0xcb},
{0x5002, 0x15},
{0x5003, 0x01},
{0x5007, 0x1e},
{0x5008, 0x00},
{0x5009, 0x00},
{0x500a, 0x00},
{0x500b, 0x30},
{0x500c, 0x12},
{0x500d, 0x1f},
{0x500e, 0x0a},
{0x500f, 0x0f},
{0x504b, 0x40},
{0x5081, 0x00},
{0x50c4, 0xaa},
{0x50d0, 0x00},
{0x50d1, 0x10},
{0x50d2, 0x01},
{0x50d3, 0xb3},
{0x515a, 0x06},
{0x515b, 0x06},
{0x515c, 0x02},
{0x515d, 0x02},
{0x515e, 0x02},
{0x515f, 0x06},
{0x5160, 0x0a},
{0x5161, 0x0e},
{0x5180, 0x09},
{0x5181, 0x10},
{0x5182, 0x05},
{0x5183, 0x20},
{0x5184, 0x00},
{0x5185, 0x10},
{0x5186, 0x00},
{0x5187, 0x10},
{0x5188, 0x12},
{0x5189, 0x00},
{0x518a, 0x0a},
{0x518b, 0x20},
{0x518d, 0x09},
{0x5192, 0x00},
{0x5193, 0x18},
{0x51d2, 0x10},
{0x51da, 0x00},
{0x51db, 0x30},
{0x5250, 0x8e},
{0x5251, 0x00},
{0x5252, 0x10},
{0x5254, 0x00},
{0x5255, 0x70},
{0x5256, 0x00},
{0x5257, 0xc7},
{0x5258, 0x12},
{0x5259, 0x10},
{0x525a, 0x0a},
{0x525b, 0x30},
{0x525e, 0x00},
{0x525f, 0x18},
{0x5260, 0x00},
{0x5261, 0x10},
{0x5262, 0x00},
{0x5263, 0x10},
{0x5264, 0x12},
{0x5265, 0x00},
{0x5266, 0x0a},
{0x5267, 0x20},
{0x5268, 0x00},
{0x5269, 0x00},
{0x526a, 0x00},
{0x526b, 0x00},
{0x526c, 0x12},
{0x526d, 0x10},
{0x526e, 0x0a},
{0x526f, 0x30},
{0x5278, 0x08},
{0x5279, 0x10},
{0x527a, 0x00},
{0x527b, 0x00},
{0x527c, 0x06},
{0x527d, 0x06},
{0x527e, 0x02},
{0x527f, 0x02},
{0x5280, 0x02},
{0x5281, 0x06},
{0x5282, 0x0a},
{0x5283, 0x0e},
{0x5381, 0x00},
{0x53c4, 0xaa},
{0x545a, 0x06},
{0x545b, 0x06},
{0x545c, 0x02},
{0x545d, 0x02},
{0x545e, 0x02},
{0x545f, 0x06},
{0x5460, 0x0a},
{0x5461, 0x0e},
{0x5480, 0x09},
{0x5481, 0x10},
{0x5482, 0x05},
{0x5483, 0x20},
{0x5484, 0x00},
{0x5485, 0x08},
{0x5486, 0x00},
{0x5487, 0x00},
{0x5488, 0x09},
{0x5489, 0x00},
{0x548a, 0x05},
{0x548b, 0x20},
{0x548d, 0x09},
{0x54d2, 0x10},
{0x54da, 0x00},
{0x54da, 0x00},
{0x54db, 0x30},
{0x54db, 0x30},
{0x5550, 0xec},
{0x5551, 0x00},
{0x5552, 0x10},
{0x5554, 0x00},
{0x5555, 0x72},
{0x5556, 0x00},
{0x5557, 0xca},
{0x5558, 0x12},
{0x5559, 0x10},
{0x555a, 0x0a},
{0x555b, 0x30},
{0x555e, 0x00},
{0x555f, 0x18},
{0x5560, 0x00},
{0x5561, 0x00},
{0x5562, 0x00},
{0x5563, 0x08},
{0x5564, 0x12},
{0x5565, 0x10},
{0x5566, 0x0a},
{0x5567, 0x30},
{0x5568, 0x00},
{0x5569, 0x00},
{0x556a, 0x00},
{0x556b, 0x00},
{0x556c, 0x12},
{0x556d, 0x10},
{0x556e, 0x0a},
{0x556f, 0x30},
{0x557c, 0x06},
{0x557d, 0x06},
{0x557e, 0x02},
{0x557f, 0x02},
{0x5580, 0x02},
{0x5581, 0x06},
{0x5582, 0x0a},
{0x5583, 0x0e},
{0x5681, 0x00},
{0x56c4, 0xaa},
{0x575a, 0x06},
{0x575b, 0x06},
{0x575c, 0x02},
{0x575d, 0x02},
{0x575e, 0x02},
{0x575f, 0x06},
{0x5760, 0x0a},
{0x5761, 0x0e},
{0x5780, 0x09},
{0x5781, 0x10},
{0x5782, 0x05},
{0x5783, 0x20},
{0x5784, 0x00},
{0x5785, 0x08},
{0x5786, 0x00},
{0x5787, 0x00},
{0x5788, 0x09},
{0x5789, 0x00},
{0x578a, 0x05},
{0x578b, 0x20},
{0x578d, 0x09},
{0x5792, 0x00},
{0x5793, 0x18},
{0x57d2, 0x10},
{0x57da, 0x00},
{0x57db, 0x30},
{0x5850, 0xec},
{0x5851, 0x00},
{0x5852, 0x10},
{0x5854, 0x00},
{0x5855, 0x72},
{0x5856, 0x00},
{0x5857, 0xca},
{0x5858, 0x12},
{0x5859, 0x10},
{0x585a, 0x0a},
{0x585b, 0x30},
{0x585e, 0x00},
{0x585f, 0x18},
{0x5860, 0x00},
{0x5861, 0x00},
{0x5862, 0x00},
{0x5863, 0x08},
{0x5864, 0x12},
{0x5865, 0x10},
{0x5866, 0x0a},
{0x5867, 0x30},
{0x5868, 0x00},
{0x5869, 0x00},
{0x586a, 0x00},
{0x586b, 0x00},
{0x586c, 0x12},
{0x586d, 0x10},
{0x586e, 0x0a},
{0x586f, 0x30},
{0x587c, 0x06},
{0x587d, 0x06},
{0x587e, 0x02},
{0x587f, 0x02},
{0x5880, 0x02},
{0x5881, 0x06},
{0x5882, 0x0a},
{0x5883, 0x0e},
{0x5f06, 0x10},
{0x5f07, 0x20},
{0x5f08, 0x0c},
{0x5f09, 0x0c},
{0x5f0a, 0x04},
{0x5f0b, 0x04},
{0x5f0c, 0x04},
{0x5f0d, 0x0c},
{0x5f0e, 0x14},
{0x5f0f, 0x1c},
{0x5f10, 0x01},
{0x5f11, 0x01},
{0x5f18, 0x12},
{0x5f19, 0x20},
{0x5f1a, 0x0a},
{0x5f1b, 0x40},
{0x5f1d, 0x10},
{0x5f1f, 0x00},
{0x5f20, 0x12},
{0x5f21, 0x00},
{0x5f22, 0x0a},
{0x5f23, 0x40},
{0x5f25, 0x09},
{0x5f2a, 0x00},
{0x5f2b, 0x18},
{0x6600, 0x00},
{0x6601, 0x00},
{0x6602, 0x00},
{0x6603, 0x83},
{0x6960, 0x0f},
{0x69a2, 0x09},
{0x69a3, 0x00},
{0x69a6, 0x05},
{0x69a7, 0x10},
{0x69aa, 0x09},
{0x69ab, 0x00},
{0x69ae, 0x05},
{0x69af, 0x10},
{0x69b2, 0x09},
{0x69b3, 0x00},
{0x69b6, 0x05},
{0x69b7, 0x10},
{0x69ba, 0x09},
{0x69bb, 0x00},
{0x69be, 0x05},
{0x69bf, 0x10},
{0x6a24, 0x09},
{0x6a25, 0x00},
{0x6a2a, 0x05},
{0x6a2b, 0x10},
{0x6a61, 0x40},
{0x6a64, 0x09},
{0x6a65, 0x00},
{0x6a6a, 0x05},
{0x6a6b, 0x10},
{0x6a23, 0x00},
{0x6a27, 0x00},
{0x6a63, 0x00},
{0x6a67, 0x00},
{0x69a1, 0x00},
{0x69a5, 0x00},
{0x69a9, 0x00},
{0x69ad, 0x00},
{0x69b1, 0x00},
{0x69b5, 0x00},
{0x69b9, 0x00},
{0x69bd, 0x00},
{0xfff4, 0x01},
{0xfff6, 0x00},
{0x0361, 0x07},
{0x3644, 0x20},
{0x5000, 0x2b},
{0x5001, 0x0b},
{0x50d4, 0x00},
{0x5171, 0xbe},
{0x3222, 0x03},
{0x3208, 0x06},
{0x3938, 0x41},
{0x393b, 0x41},
{0x3208, 0x16},
{0x3208, 0x07},
{0x3938, 0x43},
{0x393b, 0x44},
{0x3208, 0x17},
{0x3208, 0x08},
{0x3938, 0x45},
{0x393b, 0x46},
{0x3208, 0x18},
{0x3208, 0x09},
{0x3938, 0x4b},
{0x393b, 0x4b},
{0x3208, 0x19},
{0x5000, 0x29},
{0x5001, 0x01},
{REG_NULL, 0x00},
};
static const struct os12d40_mode supported_modes_4lane[] = {
{
.bus_fmt = MEDIA_BUS_FMT_SGBRG10_1X10,
.width = 2256,
.height = 1256,
.max_fps = {
.numerator = 10000,
.denominator = 300000,
},
.exp_def = 0x0500,
.hts_def = 0x438 * 8,
.vts_def = 0x0ad8,
.reg_list = os12d40_2256x1256_regs_4lane,
.hdr_mode = NO_HDR,
},
{
.bus_fmt = MEDIA_BUS_FMT_SBGGR10_1X10,
.width = 4512,
.height = 2512,
.max_fps = {
@@ -1321,7 +2135,7 @@ static int os12d40_set_fmt(struct v4l2_subdev *sd,
mutex_lock(&os12d40->mutex);
mode = os12d40_find_best_fit(os12d40, fmt);
fmt->format.code = OS12D40_MEDIA_BUS_FMT;
fmt->format.code = mode->bus_fmt;
fmt->format.width = mode->width;
fmt->format.height = mode->height;
fmt->format.field = V4L2_FIELD_NONE;
@@ -1366,7 +2180,7 @@ static int os12d40_get_fmt(struct v4l2_subdev *sd,
} else {
fmt->format.width = mode->width;
fmt->format.height = mode->height;
fmt->format.code = OS12D40_MEDIA_BUS_FMT;
fmt->format.code = mode->bus_fmt;
fmt->format.field = V4L2_FIELD_NONE;
}
mutex_unlock(&os12d40->mutex);
@@ -1378,9 +2192,11 @@ static int os12d40_enum_mbus_code(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_mbus_code_enum *code)
{
struct os12d40 *os12d40 = to_os12d40(sd);
if (code->index != 0)
return -EINVAL;
code->code = OS12D40_MEDIA_BUS_FMT;
code->code = os12d40->cur_mode->bus_fmt;
return 0;
}
@@ -1394,9 +2210,6 @@ static int os12d40_enum_frame_sizes(struct v4l2_subdev *sd,
if (fse->index >= os12d40->cfg_num)
return -EINVAL;
if (fse->code != OS12D40_MEDIA_BUS_FMT)
return -EINVAL;
fse->min_width = supported_modes[fse->index].width;
fse->max_width = supported_modes[fse->index].width;
fse->max_height = supported_modes[fse->index].height;
@@ -1487,7 +2300,10 @@ static long os12d40_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
case RKMODULE_GET_BAYER_MODE:
bayer_mode = (u32 *)arg;
#ifdef USE_4_CELL
*bayer_mode = RKMODULE_QUARD_BAYER;
if (os12d40->cur_mode->width == 4512)
*bayer_mode = RKMODULE_QUARD_BAYER;
else
*bayer_mode = RKMODULE_NORMAL_BAYER;
#else
*bayer_mode = RKMODULE_NORMAL_BAYER;
#endif
@@ -1845,7 +2661,7 @@ static int os12d40_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
/* Initialize try_fmt */
try_fmt->width = def_mode->width;
try_fmt->height = def_mode->height;
try_fmt->code = OS12D40_MEDIA_BUS_FMT;
try_fmt->code = def_mode->bus_fmt;
try_fmt->field = V4L2_FIELD_NONE;
mutex_unlock(&os12d40->mutex);
@@ -1864,7 +2680,7 @@ static int os12d40_enum_frame_interval(struct v4l2_subdev *sd,
if (fie->index >= os12d40->cfg_num)
return -EINVAL;
fie->code = OS12D40_MEDIA_BUS_FMT;
fie->code = supported_modes[fie->index].bus_fmt;
fie->width = supported_modes[fie->index].width;
fie->height = supported_modes[fie->index].height;
fie->interval = supported_modes[fie->index].max_fps;
@@ -1892,10 +2708,17 @@ static int os12d40_get_selection(struct v4l2_subdev *sd,
struct os12d40 *os12d40 = to_os12d40(sd);
if (sel->target == V4L2_SEL_TGT_CROP_BOUNDS) {
sel->r.left = CROP_START(os12d40->cur_mode->width, DST_WIDTH);
sel->r.width = DST_WIDTH;
sel->r.top = CROP_START(os12d40->cur_mode->height, DST_HEIGHT);
sel->r.height = DST_HEIGHT;
if (os12d40->cur_mode->width == 4512) {
sel->r.left = CROP_START(os12d40->cur_mode->width, DST_WIDTH);
sel->r.width = DST_WIDTH;
sel->r.top = CROP_START(os12d40->cur_mode->height, DST_HEIGHT);
sel->r.height = DST_HEIGHT;
} else {
sel->r.left = 0;
sel->r.width = os12d40->cur_mode->width;
sel->r.top = 0;
sel->r.height = os12d40->cur_mode->height;
}
return 0;
}
return -EINVAL;

File diff suppressed because it is too large Load Diff

View File

@@ -197,6 +197,7 @@ struct sc450ai {
struct preisp_hdrae_exp_s init_hdrae_exp;
struct cam_sw_info *cam_sw_inf;
struct v4l2_fwnode_endpoint bus_cfg;
enum rkmodule_sync_mode sync_mode;
};
#define to_sc450ai(sd) container_of(sd, struct sc450ai, subdev)
@@ -1205,6 +1206,23 @@ static const struct regval sc450ai_hdr2_10_2688x1520_30fps_4lane_regs[] = {
{REG_NULL, 0x00},
};
static __maybe_unused const struct regval sc450ai_interal_sync_master_start_regs[] = {
{0x300a, 0x24}, //bit[2]=1 fsync_oen
{0x3032, 0xa0},////bit[7]=1 vsync_tc_en
{REG_NULL, 0x00},
};
static __maybe_unused const struct regval sc450ai_interal_sync_slaver_start_regs[] = {
{0x300a, 0x22},
{0x3222, 0x01}, //Bit[0]: Slave mode en
{0x3224, 0x92}, //fsync trigger
{0x3230, 0x00},
{0x3231, 0x04},
{0x322e, 0x00},
{0x322f, 0x02},
{REG_NULL, 0x00},
};
static const struct sc450ai_mode supported_modes_2lane[] = {
{
.width = 2688,
@@ -1926,6 +1944,7 @@ static long sc450ai_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
int cur_best_fit = -1;
int cur_best_fit_dist = -1;
int cur_dist, cur_fps, dst_fps;
u32 *sync_mode = NULL;
switch (cmd) {
case RKMODULE_GET_MODULE_INFO:
@@ -2103,7 +2122,14 @@ static long sc450ai_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
setting = (struct rk_sensor_setting *)arg;
ret = sc450ai_set_setting(sc450ai, setting);
break;
case RKMODULE_GET_SYNC_MODE:
sync_mode = (u32 *)arg;
*sync_mode = sc450ai->sync_mode;
break;
case RKMODULE_SET_SYNC_MODE:
sync_mode = (u32 *)arg;
sc450ai->sync_mode = *sync_mode;
break;
default:
ret = -ENOIOCTLCMD;
break;
@@ -2123,6 +2149,7 @@ static long sc450ai_compat_ioctl32(struct v4l2_subdev *sd,
struct rk_sensor_setting *setting;
long ret;
u32 stream = 0;
u32 *sync_mode = NULL;
switch (cmd) {
case RKMODULE_GET_MODULE_INFO:
@@ -2202,7 +2229,21 @@ static long sc450ai_compat_ioctl32(struct v4l2_subdev *sd,
ret = -EFAULT;
kfree(setting);
break;
case RKMODULE_GET_SYNC_MODE:
ret = sc450ai_ioctl(sd, cmd, &sync_mode);
if (!ret) {
ret = copy_to_user(up, &sync_mode, sizeof(u32));
if (ret)
ret = -EFAULT;
}
break;
case RKMODULE_SET_SYNC_MODE:
ret = copy_from_user(&sync_mode, up, sizeof(u32));
if (!ret)
ret = sc450ai_ioctl(sd, cmd, &sync_mode);
else
ret = -EFAULT;
break;
default:
ret = -ENOIOCTLCMD;
break;
@@ -2214,7 +2255,7 @@ static long sc450ai_compat_ioctl32(struct v4l2_subdev *sd,
static int __sc450ai_start_stream(struct sc450ai *sc450ai)
{
int ret;
int ret = 0;
if (!sc450ai->is_thunderboot) {
ret = sc450ai_write_array(sc450ai->client, sc450ai->cur_mode->reg_list);
@@ -2234,8 +2275,15 @@ static int __sc450ai_start_stream(struct sc450ai *sc450ai)
}
}
}
ret = sc450ai_write_reg(sc450ai->client, SC450AI_REG_CTRL_MODE,
SC450AI_REG_VALUE_08BIT, SC450AI_MODE_STREAMING);
if (sc450ai->sync_mode == INTERNAL_MASTER_MODE)
ret |= sc450ai_write_array(sc450ai->client,
sc450ai_interal_sync_master_start_regs);
else if (sc450ai->sync_mode == EXTERNAL_MASTER_MODE)
ret |= sc450ai_write_array(sc450ai->client,
sc450ai_interal_sync_slaver_start_regs);
else if (sc450ai->sync_mode == NO_SYNC_MODE)
ret |= sc450ai_write_reg(sc450ai->client, SC450AI_REG_CTRL_MODE,
SC450AI_REG_VALUE_08BIT, SC450AI_MODE_STREAMING);
return ret;
}
@@ -2822,6 +2870,7 @@ static int sc450ai_probe(struct i2c_client *client,
int ret;
int i, hdr_mode = 0;
struct device_node *endpoint;
const char *sync_mode_name = NULL;
dev_info(dev, "driver version: %02x.%02x.%02x",
DRIVER_VERSION >> 16,
@@ -2849,6 +2898,23 @@ static int sc450ai_probe(struct i2c_client *client,
of_property_read_u32(node, RKMODULE_CAMERA_STANDBY_HW,
&sc450ai->standby_hw);
dev_info(dev, "sc450ai->standby_hw = %d\n", sc450ai->standby_hw);
ret = of_property_read_string(node, RKMODULE_CAMERA_SYNC_MODE,
&sync_mode_name);
if (ret) {
sc450ai->sync_mode = NO_SYNC_MODE;
dev_err(dev, "could not get sync mode!\n");
} else {
if (strcmp(sync_mode_name, RKMODULE_EXTERNAL_MASTER_MODE) == 0) {
sc450ai->sync_mode = EXTERNAL_MASTER_MODE;
dev_info(dev, "external master mode\n");
} else if (strcmp(sync_mode_name, RKMODULE_INTERNAL_MASTER_MODE) == 0) {
sc450ai->sync_mode = INTERNAL_MASTER_MODE;
dev_info(dev, "internal master mode\n");
} else if (strcmp(sync_mode_name, RKMODULE_SOFT_SYNC_MODE) == 0) {
sc450ai->sync_mode = SOFT_SYNC_MODE;
dev_info(dev, "soft sync mode\n");
}
}
sc450ai->is_thunderboot = IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_ISP);
dev_err(dev, "========= is_thunderboot %d\n", sc450ai->is_thunderboot);

View File

@@ -3953,9 +3953,10 @@ static unsigned char get_csi_fmt_val(struct rkcif_stream *stream,
csi_fmt_val = CSI_WRDDR_TYPE_RAW12;
break;
}
} else if (cif_fmt_in->csi_fmt_val == CSI_WRDDR_TYPE_RGB565 ||
(stream->cifdev->chip_id < CHIP_RK3576_CIF &&
cif_fmt_in->csi_fmt_val == CSI_WRDDR_TYPE_RGB888)) {
} else if (stream->cifdev->chip_id < CHIP_RK3576_CIF &&
cif_fmt_in->csi_fmt_val == CSI_WRDDR_TYPE_RGB888) {
csi_fmt_val = CSI_WRDDR_TYPE_YUV422;
} else if (cif_fmt_in->csi_fmt_val == CSI_WRDDR_TYPE_RGB565) {
csi_fmt_val = CSI_WRDDR_TYPE_RAW8;
} else {
csi_fmt_val = cif_fmt_in->csi_fmt_val;
@@ -3985,7 +3986,7 @@ static int rkcif_csi_channel_init(struct rkcif_stream *stream,
channel->crop_en = 1;
if (channel->fmt_val == CSI_WRDDR_TYPE_RGB888 && dev->chip_id < CHIP_RK3576_CIF)
channel->crop_st_x = 3 * stream->crop[CROP_SRC_ACT].left;
channel->crop_st_x = 3 * stream->crop[CROP_SRC_ACT].left / 2;
else if (channel->fmt_val == CSI_WRDDR_TYPE_RGB565)
channel->crop_st_x = 2 * stream->crop[CROP_SRC_ACT].left;
else
@@ -4056,6 +4057,9 @@ static int rkcif_csi_channel_init(struct rkcif_stream *stream,
if ((channel->fmt_val == CSI_WRDDR_TYPE_RGB888 && dev->chip_id < CHIP_RK3576_CIF) ||
channel->fmt_val == CSI_WRDDR_TYPE_RGB565)
channel->width = channel->width * fmt->bpp[0] / 8;
if (channel->fmt_val == CSI_WRDDR_TYPE_RGB888)
channel->width /= 2;
/*
* rk cif don't support output yuyv fmt data
* if user request yuyv fmt, the input mode must be RAW8
@@ -4372,6 +4376,8 @@ static int rkcif_csi_get_output_type_mask(struct rkcif_stream *stream)
break;
case V4L2_PIX_FMT_RGB24:
case V4L2_PIX_FMT_BGR24:
mask = CSI_WRDDR_TYPE_YUV_PACKET | CSI_YUV_OUTPUT_ORDER_UYVY;
break;
case V4L2_PIX_FMT_RGB565:
case V4L2_PIX_FMT_BGR666:
mask = CSI_WRDDR_TYPE_RAW_COMPACT;
@@ -4974,7 +4980,7 @@ static int rkcif_csi_channel_set_v1(struct rkcif_stream *stream,
channel->vc << 8 | channel->data_type << 10;
if (dev->chip_id >= CHIP_RK3588_CIF) {
if (channel->csi_fmt_val == CSI_WRDDR_TYPE_RGB888)
val |= CSI_WRDDR_TYPE_RAW8;
val |= CSI_WRDDR_TYPE_YUV422;
else if (channel->csi_fmt_val == CSI_WRDDR_TYPE_RAW14_RK3588)
val |= channel->csi_fmt_val << 1;
else
@@ -6916,6 +6922,8 @@ void rkcif_do_stop_stream(struct rkcif_stream *stream,
break;
}
}
if (can_reset && hw_dev->dummy_buf.vaddr)
rkcif_destroy_dummy_buf(stream);
mutex_unlock(&hw_dev->dev_lock);
if (dev->can_be_reset && dev->chip_id >= CHIP_RK3588_CIF) {
rkcif_do_soft_reset(dev);
@@ -6938,8 +6946,6 @@ void rkcif_do_stop_stream(struct rkcif_stream *stream,
}
if (atomic_read(&dev->pipe.stream_cnt) == 0)
atomic_set(&stream->sub_stream_buf_cnt, 0);
if (can_reset && hw_dev->dummy_buf.vaddr)
rkcif_destroy_dummy_buf(stream);
stream->rounding_bit = 0;
if (stream->id == RKCIF_STREAM_MIPI_ID0 && dev->is_support_get_exp) {
kfifo_free(&stream->exp_kfifo);
@@ -11213,7 +11219,7 @@ static void rkcif_dynamic_crop(struct rkcif_stream *stream)
struct csi_channel_info *channel = &cif_dev->channels[stream->id];
if (channel->fmt_val == CSI_WRDDR_TYPE_RGB888)
crop_x = 3 * stream->crop[CROP_SRC_ACT].left;
crop_x = 3 * stream->crop[CROP_SRC_ACT].left / 2;
else if (channel->fmt_val == CSI_WRDDR_TYPE_RGB565)
crop_x = 2 * stream->crop[CROP_SRC_ACT].left;
else
@@ -13946,7 +13952,8 @@ static void rkcif_deal_sof(struct rkcif_device *cif_dev)
detect_stream->fs_cnt_in_single_frame++;
if ((!cif_dev->sditf[0] ||
cif_dev->sditf[0]->mode.rdbk_mode >= RKISP_VICAP_RDBK_AIQ) &&
detect_stream->fs_cnt_in_single_frame > 1)
detect_stream->fs_cnt_in_single_frame > 1 &&
cif_dev->chip_id < CHIP_RK3588_CIF)
return;
spin_lock_irqsave(&detect_stream->fps_lock, flags);

View File

@@ -966,6 +966,28 @@ int rk806_device_init(struct rk806 *rk806)
}
EXPORT_SYMBOL_GPL(rk806_device_init);
int rk806_core_suspend(struct device *dev)
{
struct rk806 *rk806 = dev_get_drvdata(dev);
disable_irq(rk806->irq);
enable_irq_wake(rk806->irq);
return 0;
}
EXPORT_SYMBOL_GPL(rk806_core_suspend);
int rk806_core_resume(struct device *dev)
{
struct rk806 *rk806 = dev_get_drvdata(dev);
enable_irq(rk806->irq);
disable_irq_wake(rk806->irq);
return 0;
}
EXPORT_SYMBOL_GPL(rk806_core_resume);
int rk806_device_exit(struct rk806 *rk806)
{
struct device_node *np = rk806->dev->of_node;

View File

@@ -45,10 +45,13 @@ static void rk806_remove(struct i2c_client *client)
rk806_device_exit(rk806);
}
static DEFINE_SIMPLE_DEV_PM_OPS(rk806_i2c_pm_ops, rk806_core_suspend, rk806_core_resume);
static struct i2c_driver rk806_i2c_driver = {
.driver = {
.name = "rk806",
.of_match_table = of_match_ptr(rk806_of_match),
.pm = pm_sleep_ptr(&rk806_i2c_pm_ops),
},
.probe = rk806_i2c_probe,
.remove = rk806_remove,

View File

@@ -111,6 +111,8 @@ static void rk806_spi_remove(struct spi_device *spi)
rk806_device_exit(rk806);
}
static DEFINE_SIMPLE_DEV_PM_OPS(rk806_spi_pm_ops, rk806_core_suspend, rk806_core_resume);
static const struct spi_device_id rk806_spi_id_table[] = {
{ "rk806", 0 },
{ /* sentinel */ }
@@ -122,6 +124,7 @@ static struct spi_driver rk806_spi_driver = {
.name = "rk806",
.owner = THIS_MODULE,
.of_match_table = of_match_ptr(rk806_of_match),
.pm = pm_sleep_ptr(&rk806_spi_pm_ops),
},
.probe = rk806_spi_probe,
.remove = rk806_spi_remove,

View File

@@ -541,6 +541,8 @@ extern const struct regmap_config rk806_regmap_config;
extern const struct of_device_id rk806_of_match[];
int rk806_device_init(struct rk806 *rk806);
int rk806_device_exit(struct rk806 *rk806);
int rk806_core_suspend(struct device *dev);
int rk806_core_resume(struct device *dev);
int rk806_field_write(struct rk806 *rk806,
enum rk806_fields field_id,
unsigned int val);

View File

@@ -222,6 +222,15 @@
#define RKMODULE_GET_BAYER_MODE \
_IOR('V', BASE_VIDIOC_PRIVATE + 52, __u32)
#define RKMODULE_GET_WB_GAIN_INFO \
_IOR('V', BASE_VIDIOC_PRIVATE + 53, struct rkmodule_wb_gain_info)
#define RKMODULE_GET_BLC_INFO \
_IOR('V', BASE_VIDIOC_PRIVATE + 54, struct rkmodule_blc_info)
#define RKMODULE_SET_CMPS_MODE \
_IOW('V', BASE_VIDIOC_PRIVATE + 55, __u32)
struct rkmodule_i2cdev_info {
__u8 slave_addr;
} __attribute__ ((packed));
@@ -964,4 +973,20 @@ enum rkmodule_bayer_mode {
RKMODULE_QUARD_BAYER,
};
struct rkmodule_wb_gain_info {
__u32 coarse_bit;
__u32 fine_bit;
__u32 reserved[8];
};
struct rkmodule_blc_info {
__u32 bit_width;
__u32 reserved[8];
};
enum rkmodule_cmps_mode {
CMPS_LOW_BIT_WIDTH_MODE,
CMPS_HIGH_BIT_WIDTH_MODE,
};
#endif /* _UAPI_RKMODULE_CAMERA_H */