static int
imx328_match_id(
        hwsensor_intf_t* si, void * data)
{
    sensor_t* sensor = I2S(si);
    struct sensor_cfg_data *cdata = (struct sensor_cfg_data *)data;
    uint16_t sensor_id = 0;
    uint8_t modue_id = 0;

    cam_info("%s TODO.", __func__);

    misp_get_module_info(sensor->board_info->sensor_index,&sensor_id,&modue_id);

    if(sensor_id == 0x328)
    {
        cdata->data = sensor->board_info->sensor_index;
        hwsensor_writefile(sensor->board_info->sensor_index,
                           sensor->board_info->name);
    } else {
        cdata->data = SENSOR_INDEX_INVALID;
    }

    cam_info("%s TODO.  cdata->data=%d", __func__, cdata->data);

    return 0;
}
/*
0x300A        chipid         0x00       chipid[23:16]
0x300B        chipid         0x88       chipid[15:8]
0x300C        chipid         0x65       chipid[7:0]

*/
static int
ov8858_match_id(
        hwsensor_intf_t* si, void * data)
{
    sensor_t* sensor = I2S(si);
    struct sensor_cfg_data *cdata = (struct sensor_cfg_data *)data;
	struct sensor_cfg_data cdata_h;
	struct sensor_cfg_data cdata_l;
	u16 sensor_id = 0;

	cdata_h.cfg.reg.subaddr = 0x300B;
	cdata_h.cfg.reg.value = 0;

	cdata_l.cfg.reg.subaddr = 0x300C;
	cdata_l.cfg.reg.value = 0;

	ov8858_i2c_read(si, &cdata_h);
	ov8858_i2c_read(si, &cdata_l);

	sensor_id = (cdata_h.cfg.reg.value) << 8 | (cdata_l.cfg.reg.value);

	cam_notice( "%s, line %d, sensor id: 0x%x", __func__, __LINE__, sensor_id);

    if (0x8858 == sensor_id) {
        cam_info("%s succeed to match id.", __func__);
    } else {
        cam_info("%s failed to match id.", __func__);
        sensor->board_info->sensor_index = CAMERA_SENSOR_INVALID;
    }

    cdata->data = sensor->board_info->sensor_index;
    hwsensor_writefile(sensor->board_info->sensor_index,
        sensor->board_info->name);
    return 0;
}
static int
    ov8865_carrera_match_id(
        hwsensor_intf_t* si, void * data)
{
    sensor_t* sensor = I2S(si);
    struct sensor_cfg_data *cdata = (struct sensor_cfg_data *)data;
    uint16_t sensor_id = 0;
    uint8_t modue_id = 0;
    char * sensor_name = "ov8865";
    cam_info("%s TODO.", __func__);

    misp_get_module_info(sensor->board_info->sensor_index,&sensor_id,&modue_id);

    if(sensor_id == 0x8865) {
        strncpy(cdata->cfg.name, sensor_name, DEVICE_NAME_SIZE);
        cdata->data = sensor->board_info->sensor_index;
        hwsensor_writefile(sensor->board_info->sensor_index,
        cdata->cfg.name);
    } else {
        cdata->data = SENSOR_INDEX_INVALID;
    }

    cam_info("%s TODO.  cdata->data=%d", __func__, cdata->data);

    return 0;
}
예제 #4
0
static int ar1335_match_id(hwsensor_intf_t* si, void * data)
{
    sensor_t* sensor = I2S(si);
    struct sensor_cfg_data *cdata = (struct sensor_cfg_data *)data;
    uint16_t sensor_id = 0;
    uint8_t modue_id = 0;
    uint8_t retry = 0;

    cam_info("%s TODO.", __func__);
    for(retry = 0;retry < 2; retry++){
    misp_get_module_info(sensor->board_info->sensor_index,&sensor_id,&modue_id);
        if(sensor_id==0){
            cam_info("%s try to read camera id again",__func__);
            continue;
        }else{
            break;
        }
    }
    if(sensor_id == 0x1335) {
        cdata->data = sensor->board_info->sensor_index;
        hwsensor_writefile(sensor->board_info->sensor_index,
                   sensor->board_info->name);
    } else {
        cdata->data = SENSOR_INDEX_INVALID;
    }

    cam_info("%s TODO.  cdata->data=%d", __func__, cdata->data);

    return 0;
}
static int
ov8865_rear_match_id(
        hwsensor_intf_t* si, void * data)
{
    sensor_t* sensor = I2S(si);
    hwsensor_board_info_t *board_info = sensor->board_info;
    struct sensor_cfg_data *cdata = (struct sensor_cfg_data *)data;
    int sensor_index = CAMERA_SENSOR_INVALID;
    int ret = 0;
    int camif_id = -1;

    cam_info("%s TODO.", __func__);

    if(0 == board_info->gpios[FSIN].gpio) {
    	cam_err("%s gpio type[FSIN] is not actived.", __func__);
    	ret = -1;
    	goto out;
    }

    ret = gpio_request(board_info->gpios[FSIN].gpio, "camif_id");
    if(ret < 0) {
    	cam_err("failed to request gpio[%d]", board_info->gpios[FSIN].gpio);
    	goto out;
    }
    ret = gpio_direction_input(board_info->gpios[FSIN].gpio);
    if(ret < 0) {
    	cam_err("failed to control gpio[%d]", board_info->gpios[FSIN].gpio);
    	goto out_gpio;
    }

    ret = gpio_get_value(board_info->gpios[FSIN].gpio);
    if(ret < 0) {
    	cam_err("failed to get gpio[%d]", board_info->gpios[FSIN].gpio);
    	goto out_gpio;
    } else {
    	camif_id = ret;
    	cam_notice("%s camif id = %d.", __func__, camif_id);
    }

    if (camif_id != board_info->camif_id) {
    	cam_notice("%s camera[%s] module is not match.", __func__, board_info->name);
	board_info->sensor_index = CAMERA_SENSOR_INVALID;
    	ret = -1;
    } else {
    	cam_notice("%s camera[%s] match successfully.", __func__, board_info->name);
	sensor_index = board_info->sensor_index;
    	ret = 0;
    }

out_gpio:
	gpio_free(board_info->gpios[FSIN].gpio);
out:
    memset(cdata->cfg.name, 0, sizeof(cdata->cfg.name));
    cdata->data = sensor_index;
    if (ret == 0)
        hwsensor_writefile(sensor->board_info->sensor_index,
            sensor->board_info->name);
    return ret;
}
static int
imx179_front_match_id(
        hwsensor_intf_t* si, void * data)
{
    sensor_t* sensor = I2S(si);
    struct sensor_cfg_data *cdata = (struct sensor_cfg_data *)data;
    uint32_t gpio_id;
    int ret, value;

    cam_info("%s TODO.", __func__);

/*
    id = read_i2c();
    if (id == chipid) {
        cam_info("%s succeed to match id.", __func__);
    } else {
        cam_info("%s failed to match id.", __func__);
        sensor->board_info->sensor_index = CAMERA_SENSOR_INVALID;
    }
*/
    cdata->data = sensor->board_info->sensor_index;

    hwsensor_writefile(sensor->board_info->sensor_index,
		sensor->board_info->name);

    gpio_id = SENSOR_SCAMIF_GPIO;
    ret = gpio_request(gpio_id, "factory_gpio");
    if (ret < 0) {
        cam_err("%s failed to request sensor factory gpio pin.", __func__);
        gpio_free(gpio_id);
        return ret;
    }
    gpio_direction_input(gpio_id);

    value = gpio_get_value(gpio_id);
    if(value < 0) {
        cam_err("%s failed to get sensor factory gpio value.", __func__);
        gpio_free(gpio_id);
        return value;
    }
    else {
        cdata->mode = value;
    }

    memset(cdata->cfg.name, 0, sizeof(cdata->cfg.name));
    snprintf(cdata->cfg.name, sizeof(cdata->cfg.name)-1,  "imx179_front_%s",  ((value == 0) ? "sunny":"liteon"));
    cam_debug("renew imx179 module name = %s.", cdata->cfg.name);
    gpio_free(gpio_id);

    return 0;
}
static int
imx214_match_id(
        hwsensor_intf_t* si, void * data)
{
    sensor_t* sensor = I2S(si);
    struct sensor_cfg_data *cdata = (struct sensor_cfg_data *)data;

    #if 0
	struct sensor_cfg_data cdata_h;
	struct sensor_cfg_data cdata_l;
	u16 id_h = 0;
	u16 id_l = 0;
	u16 sensor_id = 0;

    cam_info("%s TODO.", __func__);

	cdata_h.cfg.reg.subaddr = 0x0016;
	cdata_h.cfg.reg.value = 0;

	cdata_l.cfg.reg.subaddr = 0x0017;
	cdata_l.cfg.reg.value = 0;

	imx214_i2c_read(sensor, &cdata_h);
	imx214_i2c_read(sensor, &cdata_l);

	sensor_id = (cdata_h.cfg.reg.value) << 8 | (cdata_l.cfg.reg.value);

	cam_notice( "%s, line %d, sensor id: 0x%x", __func__, __LINE__, sensor_id);
    id = read_i2c();
    if (id == chipid) {
        cam_info("%s succeed to match id.", __func__);
    } else {
        cam_info("%s failed to match id.", __func__);
        sensor->board_info->sensor_index = CAMERA_SENSOR_INVALID;
    }
#endif

    cdata->data = sensor->board_info->sensor_index;
    hwsensor_writefile(sensor->board_info->sensor_index,
        sensor->board_info->name);
    return 0;
}
static int
imx230_plk_match_id(
        hwsensor_intf_t* si, void * data)
{
    sensor_t* sensor = I2S(si);
    struct sensor_cfg_data *cdata = (struct sensor_cfg_data *)data;
    uint16_t sensor_id = 0;
    uint8_t module_id = 0;

    cam_info("%s TODO.", __func__);
    if (NULL == cdata ) {
        cam_err("%s with NULL data", __func__);
        return 0;
    }

    misp_get_module_info(sensor->board_info->sensor_index,&sensor_id,&module_id);

    if(sensor_id == 0x230) {
        cdata->data = sensor->board_info->sensor_index;

        if (MODULE_ID_SUNNY == module_id) {
            strncpy(cdata->cfg.name, MODULE_NAME_SUNNY, DEVICE_NAME_SIZE);
        } else if (MODULE_ID_LITEON == module_id) {
            strncpy(cdata->cfg.name, MODULE_NAME_LITEON, DEVICE_NAME_SIZE);
        } else if (MODULE_ID_LG == module_id) {
            strncpy(cdata->cfg.name, MODULE_NAME_LG, DEVICE_NAME_SIZE);
        } else {
            strncpy(cdata->cfg.name, MODULE_NAME_DEFAULT, DEVICE_NAME_SIZE);
        }
        cdata->cfg.name[DEVICE_NAME_SIZE - 1] = '\0';
        cam_info("%s module_name %s", __func__, cdata->cfg.name);
        hwsensor_writefile(sensor->board_info->sensor_index, cdata->cfg.name);
    } else {
        cdata->data = SENSOR_INDEX_INVALID;
    }

    cam_info("%s TODO.  cdata->data=%d", __func__, cdata->data);

    return 0;
}
예제 #9
0
static int
ov5648_match_id(
        hwsensor_intf_t* si, void * data)
{
    sensor_t* sensor = I2S(si);
    struct sensor_cfg_data *cdata = (struct sensor_cfg_data *)data;

    cam_info("%s TODO.", __func__);

/*
    id = read_i2c();
    if (id == chipid) {
        cam_info("%s succeed to match id.", __func__);
    } else {
        cam_info("%s failed to match id.", __func__);
        sensor->board_info->sensor_index = CAMERA_SENSOR_INVALID;
    }
*/
    cdata->data = sensor->board_info->sensor_index;
    hwsensor_writefile(sensor->board_info->sensor_index,
        sensor->board_info->name);
    return 0;
}
static int
    imx278_carrera_match_id(
        hwsensor_intf_t* si, void * data)
{
    sensor_t* sensor = I2S(si);
    struct sensor_cfg_data *cdata = (struct sensor_cfg_data *)data;
    uint16_t sensor_id = 0;
    uint8_t modue_id = 0;
    char *sensor_name[4]={"imx278_sunny","imx278_liteon","imx278_lg","imx278"};

    cam_info("%s TODO.", __func__);

    misp_load_fw(NULL);
    misp_get_module_info(sensor->board_info->sensor_index,&sensor_id,&modue_id);

    if (sensor_id == 0x278) {
        cdata->data = sensor->board_info->sensor_index;
        if(modue_id == 0x01) {
            strncpy(cdata->cfg.name, sensor_name[0], DEVICE_NAME_SIZE);
        } else if (modue_id == 0x03) {
            strncpy(cdata->cfg.name, sensor_name[1], DEVICE_NAME_SIZE);
        } else if (modue_id == 0x07) {
            strncpy(cdata->cfg.name, sensor_name[2], DEVICE_NAME_SIZE);
        } else {
            strncpy(cdata->cfg.name, sensor_name[3], DEVICE_NAME_SIZE);
        }

        hwsensor_writefile(sensor->board_info->sensor_index, cdata->cfg.name);
    } else {
            cdata->data = SENSOR_INDEX_INVALID;
    }

    cam_info("%s TODO.  cdata->data=%d", __func__, cdata->data);

    return 0;
}