Example #1
0
static int bt_set_gpio(int on)
{
	int rc = 0;
	struct marimba config = { .mod_id =  SLAVE_ID_BAHAMA};


	pr_debug("%s: Setting SYS_RST_PIN(%d) to %d\n",
			__func__, gpio_bt_sys_rest_en, on);
	if (on) {
		#if defined(CONFIG_QCT2243_V21) && defined(CONFIG_CPLD)
		cpld_gpio_write(gpio_bt_sys_rest_en, 1);
		#else
		if (machine_is_msm7627a_evb() || machine_is_msm8625_qrd7()) {
			rc = gpio_tlmm_config(GPIO_CFG(gpio_bt_sys_rest_en, 0,
					GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL,
					GPIO_CFG_2MA),
					GPIO_CFG_ENABLE);

			gpio_set_value(gpio_bt_sys_rest_en, 1);
		} else {
			rc = gpio_direction_output(gpio_bt_sys_rest_en, 1);
		}
		#endif
		msleep(100);
	} else {

		if (!marimba_get_fm_status(&config) &&
				!marimba_get_bt_status(&config)) {
			#if defined(CONFIG_QCT2243_V21) && defined(CONFIG_CPLD)
			cpld_gpio_write(gpio_bt_sys_rest_en, 0);
			#else
			if (machine_is_msm7627a_evb() ||
					 machine_is_msm8625_qrd7()) {
				gpio_set_value(gpio_bt_sys_rest_en, 0);
				rc = gpio_tlmm_config(GPIO_CFG(
					gpio_bt_sys_rest_en, 0,
					GPIO_CFG_INPUT, GPIO_CFG_PULL_DOWN,
					GPIO_CFG_2MA),
					GPIO_CFG_ENABLE);
			} else {
				gpio_set_value_cansleep(gpio_bt_sys_rest_en, 0);
				rc = gpio_direction_input(gpio_bt_sys_rest_en);
			}
			#endif
			msleep(100);
		}
	}
	if (rc)
		pr_err("%s: BT sys_reset_en GPIO : Error", __func__);

	return rc;
}
Example #2
0
int rawchip_power_down(const struct msm_camera_rawchip_info *pdata)
{
    int rc = 0;
    CDBG("%s\n", __func__);

#if ((defined CONFIG_I2C_CPLD) && ((defined CONFIG_MACH_DUMMY) || (defined CONFIG_MACH_DUMMY) || (defined CONFIG_MACH_DUMMY)))
    pr_info("[CAM]%s rawchip reset Low", __func__);
    rc = cpld_gpio_write(pdata->rawchip_reset, 0);
    if(rc < 0) {
        pr_err("[CAM]%s: rawchip_reset fail\n", __func__);
        return rc;
    }
#else
    rc = gpio_request(pdata->rawchip_reset, "rawchip");
    if (rc < 0)
        pr_err("GPIO(%d) request failed\n", pdata->rawchip_reset);
    pr_info("[CAM]%s rawchip reset Low", __func__);
    gpio_direction_output(pdata->rawchip_reset, 0);
    gpio_free(pdata->rawchip_reset);
#endif

    mdelay(1);

    rc = msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK);
    if (rc < 0)
        pr_err("[CAM] disable MCLK failed\n");

    if (pdata->camera_rawchip_power_off == NULL) {
        pr_err("rawchip power off platform_data didn't register\n");
        return -EIO;
    }

    rc = pdata->camera_rawchip_power_off();
    if (rc < 0)
        pr_err("[CAM] rawchip power off failed\n");

    return rc;
}
Example #3
0
int rawchip_init_yushan(void)
{
    int rc = -1;
    struct msm_camera_rawchip_info *pdata = rawchipCtrl->pdata;
    struct rawchip_sensor_data data = rawchipCtrl->sdata;
    struct rawchip_sensor_init_data rawchip_init_data;
    Yushan_New_Context_Config_t sYushanNewContextConfig;
    Yushan_ImageChar_t	sImageChar_context;
    int bit_cnt = 1;
    static uint32_t pre_pixel_clk = 0;
    uint8_t orientation;
    int retry_times;
    CDBG("%s", __func__);

    if (data.mirror_flip == CAMERA_SENSOR_MIRROR_FLIP)
        orientation = YUSHAN_ORIENTATION_MIRROR_FLIP;
    else if (data.mirror_flip == CAMERA_SENSOR_MIRROR)
        orientation = YUSHAN_ORIENTATION_MIRROR;
    else if (data.mirror_flip == CAMERA_SENSOR_FLIP)
        orientation = YUSHAN_ORIENTATION_FLIP;
    else
        orientation = YUSHAN_ORIENTATION_NONE;

    if (rawchipCtrl->rawchip_init == 0 || pre_pixel_clk != data.pixel_clk) {
        pre_pixel_clk = data.pixel_clk;
        switch (data.datatype) {
        case CSI_RAW8:
            bit_cnt = 8;
            break;
        case CSI_RAW10:
            bit_cnt = 10;
            break;
        case CSI_RAW12:
            bit_cnt = 12;
            break;
        }
        rawchip_init_data.sensor_name = data.sensor_name;
        rawchip_init_data.spi_clk = pdata->rawchip_spi_freq;
        rawchip_init_data.ext_clk = pdata->rawchip_mclk_freq;
        rawchip_init_data.lane_cnt = data.lane_cnt;
        rawchip_init_data.orientation = orientation;
        rawchip_init_data.use_ext_1v2 = 1;
        rawchip_init_data.bitrate = (data.pixel_clk * bit_cnt / data.lane_cnt) / 1000000;
        rawchip_init_data.width = data.width;
        rawchip_init_data.height = data.height;
        rawchip_init_data.blk_pixels = data.line_length_pclk - data.width;
        rawchip_init_data.blk_lines = data.frame_length_lines - data.height;
        rawchip_init_data.x_addr_start = data.x_addr_start;
        rawchip_init_data.y_addr_start = data.y_addr_start;
        rawchip_init_data.x_addr_end = data.x_addr_end;
        rawchip_init_data.y_addr_end = data.y_addr_end;
        rawchip_init_data.x_even_inc = data.x_even_inc;
        rawchip_init_data.x_odd_inc = data.x_odd_inc;
        rawchip_init_data.y_even_inc = data.y_even_inc;
        rawchip_init_data.y_odd_inc = data.y_odd_inc;
        rawchip_init_data.binning_rawchip = data.binning_rawchip;

        pr_info("[CAM] rawchip init spi_clk=%d ext_clk=%d lane_cnt=%d bitrate=%d %d %d %d %d\n",
                rawchip_init_data.spi_clk, rawchip_init_data.ext_clk,
                rawchip_init_data.lane_cnt, rawchip_init_data.bitrate,
                rawchip_init_data.width, rawchip_init_data.height,
                rawchip_init_data.blk_pixels, rawchip_init_data.blk_lines);
        if (rawchipCtrl->rawchip_init) {
#if ((defined CONFIG_I2C_CPLD) && ((defined CONFIG_MACH_DUMMY) || (defined CONFIG_MACH_DUMMY) || (defined CONFIG_MACH_DUMMY)))
            rc = cpld_gpio_write(pdata->rawchip_reset, 1);
            if(rc < 0) {
                pr_err("[CAM]%s: rawchip_reset fail\n", __func__);
                return rc;
            }
            mdelay(1);
#else
            rc = gpio_request(pdata->rawchip_reset, "rawchip");
            if (rc < 0) {
                pr_err("GPIO(%d) request failed\n", pdata->rawchip_reset);
                return rc;
            }
            gpio_direction_output(pdata->rawchip_reset, 0);
            mdelay(1);
            gpio_direction_output(pdata->rawchip_reset, 1);
            gpio_free(pdata->rawchip_reset);
#endif

        }
        for (retry_times = 0; retry_times < 5; retry_times++) {
            if ((rc = Yushan_sensor_open_init(rawchip_init_data)) == 0)
                break;
            pr_info("Retry Yushan_sensor_open_init\n");
            Reset_Yushan();
        }
        rawchipCtrl->rawchip_init = 1;
        return rc;
    }

    pr_info("[CAM] rawchip set size %d %d %d %d\n",
            data.width, data.height, data.line_length_pclk, data.frame_length_lines);

    sYushanNewContextConfig.uwActivePixels = data.width;
    sYushanNewContextConfig.uwLineBlank = data.line_length_pclk - data.width;
    sYushanNewContextConfig.uwActiveFrameLength = data.height;
    sYushanNewContextConfig.uwPixelFormat = 0x0A0A;

    sImageChar_context.bImageOrientation = orientation;
    sImageChar_context.uwXAddrStart = data.x_addr_start;
    sImageChar_context.uwYAddrStart = data.y_addr_start;
    sImageChar_context.uwXAddrEnd= data.x_addr_end;
    sImageChar_context.uwYAddrEnd= data.y_addr_end;
    sImageChar_context.uwXEvenInc = data.x_even_inc;
    sImageChar_context.uwXOddInc = data.x_odd_inc;
    sImageChar_context.uwYEvenInc = data.y_even_inc;
    sImageChar_context.uwYOddInc = data.y_odd_inc;
    sImageChar_context.bBinning = data.binning_rawchip;

    rc = Yushan_ContextUpdate_Wrapper(sYushanNewContextConfig, sImageChar_context);
    return rc;
}
Example #4
0
int rawchip_power_up(const struct msm_camera_rawchip_info *pdata)
{
    int rc = 0;
    CDBG("[CAM]%s\n", __func__);

    if (pdata->camera_rawchip_power_on == NULL) {
        pr_err("[CAM]rawchip power on platform_data didn't register\n");
        return -EIO;
    }
    rc = pdata->camera_rawchip_power_on();
    if (rc < 0) {
        pr_err("[CAM] rawchip power on failed\n");
        goto enable_power_on_failed;
    }

    rc = msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
    if (rc < 0) {
        pr_err("[CAM] enable MCLK failed\n");
        goto enable_mclk_failed;
    }
    mdelay(1);

#if ((defined CONFIG_I2C_CPLD) && ((defined CONFIG_MACH_DUMMY) || (defined CONFIG_MACH_DUMMY) || (defined CONFIG_MACH_DUMMY)))
    pr_info("[CAM]%s rawchip reset High", __func__);
    rc = cpld_gpio_write(pdata->rawchip_reset, 1);
    if(rc < 0) {
        pr_err("[CAM]%s: rawchip_reset fail\n", __func__);
        goto enable_reset_failed;
    }
    mdelay(1);
#else
    rc = gpio_request(pdata->rawchip_reset, "rawchip");
    if (rc < 0) {
        pr_err("GPIO(%d) request failed\n", pdata->rawchip_reset);
        goto enable_reset_failed;
    }

    pr_info("[CAM]%s rawchip reset High", __func__);
    gpio_direction_output(pdata->rawchip_reset, 1);
    gpio_free(pdata->rawchip_reset);
    mdelay(1);
#endif

    yushan_spi_write(0x0008, 0x7f);
    mdelay(1);

    {
        uint16_t uwSpiData = 0x1E00;
        SPI_Write(0x1018, 2, (unsigned char*)&uwSpiData);
    }

    return rc;

enable_reset_failed:
    msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK);
enable_mclk_failed:
    if (pdata->camera_rawchip_power_off == NULL)
        pr_err("rawchip power off platform_data didn't register\n");
    else
        pdata->camera_rawchip_power_off();
enable_power_on_failed:
    return rc;
}