Пример #1
0
int msm_init_ois(enum ois_ver_t ver)
{
    int rc = 0;
    uint16_t chipid = 0;

    ois_i2c_e2p_read(OIS_MAKER_ID_ADDR, &chipid, 1);

    CDBG("Enter %d\n", chipid);


    switch(chipid)
    {
    case 0x01:
        lgit_ois_init(&msm_ois_t);
        msm_ois_t.i2c_client.cci_client->sid = msm_ois_t.sid_ois;
        rc = ois_i2c_read(0x027F, &chipid, 1);
        if (rc < 0) {
            msm_ois_t.ois_func_tbl = NULL;
            printk("%s: kernel ois not supported, rc = %d\n", __func__, rc);
            return OIS_INIT_NOT_SUPPORTED;
        }
        printk("%s : LGIT OIS module type #1!\n", __func__);
        break;
    case 0x02:
    case 0x05:
        lgit2_ois_init(&msm_ois_t);
        printk("%s : LGIT OIS module type #2!\n", __func__);
        break;
    case 0x03:
        fuji_ois_init(&msm_ois_t);
        printk("%s : FujiFilm OIS module!\n", __func__);
        break;
    default:
        printk("%s : unknown module! maker id = %d\n", __func__, chipid);
        msm_ois_t.ois_func_tbl = NULL;
        return OIS_INIT_NOT_SUPPORTED;
    }
    msm_ois_t.i2c_client.cci_client->sid = msm_ois_t.sid_ois;

    if (ois_lock)
    {
        mutex_lock(msm_ois_t.ois_mutex);
        if (msm_ois_t.ois_func_tbl)
        {
            rc = msm_ois_t.ois_func_tbl->ois_on(ver);
            if (rc < 0) {
                msm_ois_t.ois_func_tbl = NULL;
                printk("%s: ois open fail\n", __func__);
            }
        }
        else
        {
            printk("%s: No OIS support!\n",__func__);
        }
        mutex_unlock(msm_ois_t.ois_mutex);
    }
    return rc;
}
Пример #2
0
int32_t	lgit2_ois_on ( enum ois_ver_t ver  )
{
	int32_t rc = OIS_SUCCESS;
	uint16_t cal_ver = 0;
	
	printk("%s, %s\n", __func__,LAST_UPDATE);

	ois_i2c_e2p_read(E2P_FIRST_ADDR+0x1C, &cal_ver, 2);
	printk("%s ver %x\n", __func__, cal_ver);

	switch (cal_ver) {
	case 0xE:
		rc = lgit2_bin_download(LGIT_VER14_REL_BIN_DATA);
		break;
	default:
		rc = OIS_INIT_NOT_SUPPORTED;
		break;
	}

	if (rc < 0)	{
		CDBG("%s: init fail \n", __func__);
		return rc;
	}
		
	switch (ver) {
	case OIS_VER_RELEASE:
		lgit2_ois_init_cmd(LIMIT_OIS_ON_RETRY);

		/* OIS ON */
		RegWriteA(0x6021, 0x12);//LGIT STILL & PAN ON MODE
		RegWriteA(0x6020, 0x02);//OIS ON

		if (!lgit2_ois_poll_ready(5))
			return OIS_INIT_TIMEOUT;
			
		break;
	case OIS_VER_CALIBRATION:
	case OIS_VER_DEBUG:
		lgit_ois_calibration(ver);

		/* OIS ON */
		RegWriteA(0x6021, 0x12);//LGIT STILL & PAN ON MODE
		RegWriteA(0x6020, 0x02);//OIS ON

		if (!lgit2_ois_poll_ready(5))
			return OIS_INIT_TIMEOUT;
		
		break;
	}
	
	lgit2_ois_func_tbl.ois_cur_mode = OIS_MODE_CENTERING_ONLY;
	
	CDBG("%s : complete!\n", __func__);	
	return rc;
}
Пример #3
0
static int lgit_ois_rohm_on(enum ois_ver_t ver)
{
    int32_t rc = OIS_SUCCESS;
    uint16_t cal_ver = 0;

    ois_i2c_e2p_read(E2P_FIRST_ADDR + 0x1C, &cal_ver, 2);
    pr_info("%s ver %x\n", __func__, cal_ver);

    switch (cal_ver) {
    case 1:
        rc = lgit2_bin_download(LGIT_VER2_REL_BIN_DATA);
        break;
    case 2:
        rc = lgit2_bin_download(LGIT_VER3_CAL_BIN_DATA);
        if (rc < 0)
            rc = lgit2_bin_download(LGIT_VER3_REL_BIN_DATA);
        break;
    default:
        rc = OIS_INIT_NOT_SUPPORTED;
        break;
    }

    if (rc < 0) {
        pr_err("%s: init fail \n", __func__);
        return rc;
    }

    rc = lgit_ois_rohm_init_cmd(LIMIT_OIS_ON_RETRY);

    lgit_ois_rohm_func_tbl.ois_cur_mode = OIS_MODE_CENTERING_ONLY;

    /* temp code to execute ois */
    reg_write_addr(0x6021, 0x11); /* movie mode, pan on */
    reg_write_addr(0x6020, 0x02); /* ois on */

    CDBG("%s: complete!\n", __func__);
    return rc;
}