rendered paste bodydiff --git a/arch/arm/mach-msm/board-htcdiamond.c b/arch/arm/mach-msm/board-htcdiamond.cindex 1172d55..3587ac6 100644--- a/arch/arm/mach-msm/board-htcdiamond.c+++ b/arch/arm/mach-msm/board-htcdiamond.c@@ -145,17 +145,89 @@ static struct msm_hsusb_platform_data msm_hsusb_pdata_adb = { .num_products = 0, }; ++#define PCOM_GPIO_CFG(a,b,c,d,e) DEX_GPIO_CFG(a,b,c,d,e,0)+static struct msm_gpio_config camera_off_gpio_table[] = {+ /* CAMERA */+ PCOM_GPIO_CFG(2, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT2 */+ PCOM_GPIO_CFG(3, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT3 */+ PCOM_GPIO_CFG(4, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT4 */+ PCOM_GPIO_CFG(5, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT5 */+ PCOM_GPIO_CFG(6, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT6 */+ PCOM_GPIO_CFG(7, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT7 */+ PCOM_GPIO_CFG(8, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT8 */+ PCOM_GPIO_CFG(9, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT9 */+ PCOM_GPIO_CFG(10, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT10 */+ PCOM_GPIO_CFG(11, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT11 */+ PCOM_GPIO_CFG(12, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* PCLK */+ PCOM_GPIO_CFG(13, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* HSYNC_IN */+ PCOM_GPIO_CFG(14, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* VSYNC_IN */+ PCOM_GPIO_CFG(15, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* MCLK */+};++static struct msm_gpio_config camera_on_gpio_table[] = {+ /* CAMERA */+ PCOM_GPIO_CFG(2, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), /* DAT2 */+ PCOM_GPIO_CFG(3, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), /* DAT3 */+ PCOM_GPIO_CFG(4, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), /* DAT4 */+ PCOM_GPIO_CFG(5, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), /* DAT5 */+ PCOM_GPIO_CFG(6, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), /* DAT6 */+ PCOM_GPIO_CFG(7, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), /* DAT7 */+ PCOM_GPIO_CFG(8, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), /* DAT8 */+ PCOM_GPIO_CFG(9, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), /* DAT9 */+ PCOM_GPIO_CFG(10, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), /* DAT10 */+ PCOM_GPIO_CFG(11, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), /* DAT11 */+ PCOM_GPIO_CFG(12, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_16MA), /* PCLK */+ PCOM_GPIO_CFG(13, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), /* HSYNC_IN */+ PCOM_GPIO_CFG(14, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), /* VSYNC_IN */+ PCOM_GPIO_CFG(15, 1, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_16MA), /* MCLK */+};++static void config_gpio_table(struct msm_gpio_config *table, int len)+{+ int n;+ struct msm_gpio_config id;+ for(n = 0; n < len; n++) {+ id = table[n];+ msm_gpio_set_function( id );+ }+}++static void config_camera_on_gpios(void)+{+ config_gpio_table(camera_on_gpio_table,+ ARRAY_SIZE(camera_on_gpio_table));+}++static void config_camera_off_gpios(void)+{+ config_gpio_table(camera_off_gpio_table,+ ARRAY_SIZE(camera_off_gpio_table));+}++static struct msm_camera_device_platform_data msm_camera_device = {+ .sensor_reset = RAPH100_CAM1_RST,+ .sensor_pwd = RAPH100_CAM_PWR1,+ //.vcm_pwd = VCM_PWDN;+ .config_gpio_on = config_camera_on_gpios,+ .config_gpio_off = config_camera_off_gpios,+};++static struct platform_device camera_dev = {+ .name = "camera",+ .dev = {+ .platform_data = &msm_camera_device,+ },+};+ static struct i2c_board_info i2c_devices[] = { { // LED & Backlight controller I2C_BOARD_INFO("microp-klt", 0x66), },-/* { I2C_BOARD_INFO("mt9t013", 0x6c>>1),- // .irq = TROUT_GPIO_TO_INT(TROUT_GPIO_CAM_BTN_STEP1_N), },-*/ { // Raphael NaviPad (cy8c20434) I2C_BOARD_INFO("raph_navi_pad", 0x62),@@ -369,6 +441,7 @@ static struct platform_device *devices[] __initdata = { &msm_device_uart_dm2, #endif &msm_device_htc_battery,+ &camera_dev, &raphael_snd, // &raphael_gps, disable until it works #ifdef CONFIG_HTC_HEADSETdiff --git a/arch/arm/mach-msm/board-htcdiamond.h b/arch/arm/mach-msm/board-htcdiamond.hindex c2881d0..11a1d47 100644--- a/arch/arm/mach-msm/board-htcdiamond.h+++ b/arch/arm/mach-msm/board-htcdiamond.h@@ -134,6 +134,7 @@ #define RAPH100_HP_PWR 89 +#define RAPH100_CAM_PWD 91 #define RAPH100_CAM1_RST 92 #define RAPH100_CAM2_RST 93 #define RAPH100_NAVI_IRQ 94diff --git a/drivers/i2c/chips/mt9t013.c b/drivers/i2c/chips/mt9t013.cindex a0d110c..477550e 100755--- a/drivers/i2c/chips/mt9t013.c+++ b/drivers/i2c/chips/mt9t013.c@@ -41,7 +41,8 @@ static const uint32_t fps_divider = 1; -#define AF_I2C_ID 0x18 /* actuator's slave address */+//#define AF_I2C_ID 0x18 /* actuator's slave address */+#define AF_I2C_ID 0x38 //TODO:what is it ? static struct i2c_client *pclient; @@ -176,16 +177,28 @@ DECLARE_MUTEX(sem); static struct msm_camera_device_platform_data *cam; #define out_dword(addr, val) \+ printk(KERN_INFO "mt9t013: writing %x to %x\n", val, addr); \ (*((volatile unsigned long *)(addr)) = ((unsigned long)(val))) #define out_dword_masked_ns(io, mask, val, current_reg_content) \ (void) out_dword(io, ((current_reg_content & (uint32_t)(~(mask))) | \ ((uint32_t)((val) & (mask))))) -#define __inpdw(port) (*((volatile uint32_t *) (port)))+/*+#define __inpdw(port) \+ printk(KERN_INFO "mt9t013: reading %x\n", port); \+ (*((volatile uint32_t *) (port)))+*/+uint32_t __inpdw(int port) {+ printk(KERN_INFO "mt9t013: reading %x\n", port);+ uint32_t val=(*((volatile uint32_t *) (port)));+ printk(KERN_INFO "mt9t013: succeeded\n", port);+ return val;+} #define in_dword_masked(addr, mask) (__inpdw(addr) & (uint32_t)mask ) -#define HWIO_MDDI_CAMIF_CFG_ADDR MSM_MDC_BASE+int camif_cfg_addr=0;+#define HWIO_MDDI_CAMIF_CFG_ADDR camif_cfg_addr //MSM_MDC_BASE #define HWIO_MDDI_CAMIF_CFG_RMSK 0x1fffff #define HWIO_MDDI_CAMIF_CFG_IN \ in_dword_masked(HWIO_MDDI_CAMIF_CFG_ADDR, HWIO_MDDI_CAMIF_CFG_RMSK)@@ -586,11 +599,13 @@ static int mt9t013_release(struct inode *ip, struct file *fp) static int mt9t013_camif_pad_reg_reset(void) {+ printk(KERN_ERR "ok:%s:%d\n", __FILE__, __LINE__); int rc = clk_select(1); if(rc < 0) { printk(KERN_ERR "mt9t013 error switching to internal clock\n"); return rc; }+ printk(KERN_ERR "ok:%s:%d\n", __FILE__, __LINE__); HWIO_OUTM (MDDI_CAMIF_CFG, HWIO_FMSK (MDDI_CAMIF_CFG, CAM_SEL) | HWIO_FMSK (MDDI_CAMIF_CFG, CAM_PCLK_SRC_SEL) |@@ -598,18 +613,22 @@ static int mt9t013_camif_pad_reg_reset(void) 1 << HWIO_SHFT (MDDI_CAMIF_CFG, CAM_SEL) | 3 << HWIO_SHFT (MDDI_CAMIF_CFG, CAM_PCLK_SRC_SEL) | 0 << HWIO_SHFT (MDDI_CAMIF_CFG, CAM_PCLK_INVERT));+ printk(KERN_ERR "ok:%s:%d\n", __FILE__, __LINE__); msleep(10); HWIO_OUTM (MDDI_CAMIF_CFG, HWIO_FMSK (MDDI_CAMIF_CFG, CAM_PAD_REG_SW_RESET), 1 << HWIO_SHFT (MDDI_CAMIF_CFG, CAM_PAD_REG_SW_RESET));+ printk(KERN_ERR "ok:%s:%d\n", __FILE__, __LINE__); msleep(10); HWIO_OUTM (MDDI_CAMIF_CFG, HWIO_FMSK (MDDI_CAMIF_CFG, CAM_PAD_REG_SW_RESET), 0 << HWIO_SHFT (MDDI_CAMIF_CFG, CAM_PAD_REG_SW_RESET));+ printk(KERN_ERR "ok:%s:%d\n", __FILE__, __LINE__); msleep(10); rc = clk_select(0); /* external */+ printk(KERN_ERR "ok:%s:%d\n", __FILE__, __LINE__); if(rc < 0) { printk(KERN_ERR "mt9t013 error switching to external clock\n"); return rc;@@ -818,6 +837,7 @@ static int mt9t013_lens_power(int on) { int rc; printk(KERN_INFO "mt9t013: lens power %d\n", on);+ return 0; rc = gpio_request(cam->vcm_pwd, "mt9t013"); if (!rc) gpio_direction_output(cam->vcm_pwd, !on);@@ -1327,6 +1347,7 @@ static int mt9t013_plat_probe(struct platform_device *pdev __attribute__((unused { printk(KERN_INFO "pdev->dev.platform_data is not NULL\n"); cam = pdev->dev.platform_data;+ camif_cfg_addr=ioremap(0x3A00000, MSM_MDC_SIZE); rc = i2c_add_driver(&mt9t013_driver); } return rc;