diff --git a/external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libcedarx/config/v316_cedarx.conf b/external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libcedarx/config/v316_cedarx.conf index 874a88d26..53d1682d7 100755 --- a/external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libcedarx/config/v316_cedarx.conf +++ b/external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libcedarx/config/v316_cedarx.conf @@ -12,7 +12,7 @@ max_cache_buffer_size = 204800 # KB av_sync_duration = 0 # millisecond # picture num for modules -pic_4list_num = 3 +pic_4list_num = 2 pic_4di_num = 0 pic_4rotate_num = 0 pic_4smooth_num = 0 diff --git a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/gc2083_mipi.c b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/gc2083_mipi.c index dec2d8a97..d7d975bd4 100644 --- a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/gc2083_mipi.c +++ b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/gc2083_mipi.c @@ -21,6 +21,8 @@ #include #include #include +// #include +#include #include "camera.h" #include "sensor_helper.h" @@ -1506,13 +1508,56 @@ static int sensor_init_controls(struct v4l2_subdev *sd, const struct v4l2_ctrl_o return ret; } static int sensor_dev_id; +#if 1 +static int standby_state; +static ssize_t standby_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct v4l2_subdev *sd = dev_get_drvdata(dev); + // 假设通过读取寄存器获取standby状态 + // standby_state = i2c_read(sd, REG_STANDBY_STATUS); + // standby_state = 0; // 这里需要根据硬件实现获取当前状态 + + return sprintf(buf, "%d\n", standby_state); +} + +static ssize_t standby_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct v4l2_subdev *sd = dev_get_drvdata(dev); + int value, ret; + + // 将用户输入的字符串转换为整数 + if (kstrtoint(buf, 10, &value)) + return -EINVAL; + + // 根据value的值调用sensor_power函数 + if (value == 1) { + ret = sensor_power(sd, STBY_ON); // 进入standby模式 + } else if (value == 0) { + ret = sensor_power(sd, STBY_OFF); // 退出standby模式 + } else { + return -EINVAL; // 非法输入 + } + + if (ret) + return ret; + + return count; +} + +static DEVICE_ATTR_RW(standby); +#endif static int sensor_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct v4l2_subdev *sd; struct sensor_info *info; int i; + int ret; info = kzalloc(sizeof(struct sensor_info), GFP_KERNEL); if (info == NULL) @@ -1531,6 +1576,13 @@ static int sensor_probe(struct i2c_client *client, sensor_init_controls(sd, &sensor_ctrl_ops); + standby_state = 0; + ret = sysfs_create_file(&client->dev.kobj, &dev_attr_standby.attr); + if (ret) { + sensor_err("failed to create device file [standby]\n"); + return ret; + } + mutex_init(&info->lock); info->fmt = &sensor_formats[0]; @@ -1557,6 +1609,9 @@ static int sensor_remove(struct i2c_client *client) int i; if (client) { + /* 移除设备属性文件 */ + sysfs_remove_file(&client->dev.kobj, &dev_attr_standby.attr); + for (i = 0; i < SENSOR_NUM; i++) { if (!strcmp(cci_drv[i].name, client->name)) break; diff --git a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/sc2356_mipi.c b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/sc2356_mipi.c index f7f8dc5b0..a2b35a1e0 100755 --- a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/sc2356_mipi.c +++ b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/sc2356_mipi.c @@ -134,7 +134,7 @@ static struct regval_list sensor_800x600_30_regs[] = { {0x3213, 0x02}, {0x3215, 0x31}, {0x3220, 0x01}, - {0x3221,0x60}, + {0x3221, 0x06}, {0x3248, 0x02}, {0x3253, 0x0a}, {0x3301, 0xff}, @@ -239,7 +239,7 @@ static struct regval_list sensor_800x600_30_regs[] = { static struct regval_list sensor_1600x1200_30_regs[] = { {0x0103,0x01}, {0x0100,0x00}, - {0x3221,0x60},//hflip:0x06 vflip:0x60 + {0x3221,0x06},//hflip:0x06 vflip:0x60 {0x36e9,0x80}, {0x36e9,0x24}, {0x301f,0x01}, @@ -737,7 +737,7 @@ static int sensor_s_hflip(struct v4l2_subdev *sd, int enable) static int sensor_get_fmt_mbus_core(struct v4l2_subdev *sd, int *code) { - *code = MEDIA_BUS_FMT_SRGGB10_1X10;//;MEDIA_BUS_FMT_SBGGR10_1X10; + *code = MEDIA_BUS_FMT_SBGGR10_1X10;//MEDIA_BUS_FMT_SRGGB10_1X10;// return 0; } @@ -1158,7 +1158,7 @@ static long sensor_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) static struct sensor_format_struct sensor_formats[] = { { .desc = "Raw RGB Bayer", - .mbus_code = MEDIA_BUS_FMT_SRGGB10_1X10,//MEDIA_BUS_FMT_SBGGR10_1X10, /*.mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10, */ + .mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10,//MEDIA_BUS_FMT_SBGGR10_1X10, /*.mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10, */ .regs = sensor_fmt_raw, .regs_size = ARRAY_SIZE(sensor_fmt_raw), .bpp = 1 @@ -1493,12 +1493,58 @@ static int sensor_init_controls(struct v4l2_subdev *sd, const struct v4l2_ctrl_o } static int sensor_dev_id; +#if 1 +static int standby_state; +static ssize_t standby_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct v4l2_subdev *sd = dev_get_drvdata(dev); + + // 假设通过读取寄存器获取standby状态 + // standby_state = i2c_read(sd, REG_STANDBY_STATUS); + // standby_state = 0; // 这里需要根据硬件实现获取当前状态 + + return sprintf(buf, "%d\n", standby_state); +} + +static ssize_t standby_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct v4l2_subdev *sd = dev_get_drvdata(dev); + int value, ret; + + // 将用户输入的字符串转换为整数 + if (kstrtoint(buf, 10, &value)) + return -EINVAL; + + // 根据value的值调用sensor_power函数 + if (value == 1) { + // ret = sensor_power(sd, STBY_ON); // 进入standby模式 + ret = sensor_write(sd, 0x0100, 0x00); //sleep enable + } else if (value == 0) { + // ret = sensor_power(sd, STBY_OFF); // 退出standby模式 + ret = sensor_write(sd, 0x0100, 0x01); //sleep disable + } else { + return -EINVAL; // 非法输入 + } + + if (ret) + return ret; + + return count; +} + +static DEVICE_ATTR_RW(standby); +#endif static int sensor_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct v4l2_subdev *sd; struct sensor_info *info; int i = 0; + int ret; printk("===========xxxxx client name:%s, slave:0x%x\n", client->name, client->addr); info = kzalloc(sizeof(struct sensor_info), GFP_KERNEL); if (info == NULL) @@ -1518,6 +1564,13 @@ static int sensor_probe(struct i2c_client *client, const struct i2c_device_id *i sensor_init_controls(sd, &sensor_ctrl_ops); + standby_state = 0; + ret = sysfs_create_file(&client->dev.kobj, &dev_attr_standby.attr); + if (ret) { + sensor_err("failed to create device file [standby]\n"); + return ret; + } + mutex_init(&info->lock); sensor_print("========ywj_dg_add==============\n"); diff --git a/lichee/rtos-hal/hal/source/vin/modules/sensor/sc2356_mipi.c b/lichee/rtos-hal/hal/source/vin/modules/sensor/sc2356_mipi.c index 726c50ef3..15a5c91c9 100755 --- a/lichee/rtos-hal/hal/source/vin/modules/sensor/sc2356_mipi.c +++ b/lichee/rtos-hal/hal/source/vin/modules/sensor/sc2356_mipi.c @@ -117,7 +117,7 @@ static struct regval_list sensor_800x600_30_regs[] = { {0x3213, 0x02}, {0x3215, 0x31}, {0x3220, 0x01}, - {0x3221, 0x60}, + {0x3221, 0x06}, {0x3248, 0x02}, {0x3253, 0x0a}, {0x3301, 0xff}, @@ -340,7 +340,7 @@ static struct regval_list sensor_800x600_30_regs[] = { static struct regval_list sensor_1600x1200_30_regs[] = { {0x0103,0x01}, {0x0100,0x00}, - {0x3221,0x60},//hflip:0x06 vflip:0x60 + {0x3221,0x06},//hflip:0x06 vflip:0x60 {0x36e9,0x80}, {0x36e9,0x24}, {0x301f,0x01}, @@ -695,7 +695,7 @@ static int sensor_init(int id) static struct sensor_format_struct sensor_formats[] = { #ifdef SC2356_800X600_30FPS { - .mbus_code = MEDIA_BUS_FMT_SRGGB10_1X10,//MEDIA_BUS_FMT_SBGGR10_1X10, /*.mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10, */ + .mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10,//MEDIA_BUS_FMT_SRGGB10_1X10, /*.mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10, */ .width = 800, .height = 600,//1080, .hoffset = 0, @@ -719,7 +719,7 @@ static struct sensor_format_struct sensor_formats[] = { #ifdef SC2356_1600X1200_30FPS { - .mbus_code = MEDIA_BUS_FMT_SRGGB10_1X10,//MEDIA_BUS_FMT_SBGGR10_1X10, /*.mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10, */ + .mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10,//MEDIA_BUS_FMT_SRGGB10_1X10, /*.mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10, */ .width = 1600, .height = 1200,//1080, .hoffset = 0, diff --git a/target/allwinner/v851s3-fastboot_sl100_front/busybox-init-base-files/APP/SL100FRONTPANEL b/target/allwinner/v851s3-fastboot_sl100_front/busybox-init-base-files/APP/SL100FRONTPANEL index 2acea3ab9..d62b2eed0 100755 Binary files a/target/allwinner/v851s3-fastboot_sl100_front/busybox-init-base-files/APP/SL100FRONTPANEL and b/target/allwinner/v851s3-fastboot_sl100_front/busybox-init-base-files/APP/SL100FRONTPANEL differ