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; }
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; }
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; }
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; }