All pastes #1719884 Raw Edit

phh

public text v1 · immutable
#1719884 ·published 2009-12-18 22:52 UTC
rendered paste body
diff --git a/arch/arm/mach-msm/board-htcdiamond.c b/arch/arm/mach-msm/board-htcdiamond.cindex f427294..2fedb13 100644--- a/arch/arm/mach-msm/board-htcdiamond.c+++ b/arch/arm/mach-msm/board-htcdiamond.c@@ -146,17 +146,85 @@ 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_sensor_info 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,+	.sensor_name	= "mt9t013",+	.flash_type	= MSM_CAMERA_FLASH_NONE,+};+ 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),+		.platform_data =  	},-*/ 	{ 		// Raphael NaviPad (cy8c20434) 		I2C_BOARD_INFO("raph_navi_pad", 0x62),@@ -200,6 +268,14 @@ static struct android_pmem_platform_data android_pmem_gpu1_pdata = { 	.cached = 0, }; +static struct android_pmem_platform_data android_pmem_camera_pdata = {+	.name = "pmem_camera",+	.start = MSM_PMEM_CAMERA_BASE,+	.size = MSM_PMEM_CAMERA_SIZE,+	.no_allocator = 1,+	.cached = 0,+};+ static struct platform_device android_pmem_device = { 	.name = "android_pmem", 	.id = 0,@@ -224,6 +300,12 @@ static struct platform_device android_pmem_gpu1_device = { 	.dev = { .platform_data = &android_pmem_gpu1_pdata }, }; +static struct platform_device android_pmem_camera_device = {+	.name = "android_pmem",+	.id = 3,+	.dev = { .platform_data = &android_pmem_camera_pdata },+};+ static smem_batt_t msm_battery_pdata = { 	.gpio_battery_detect = RAPH100_BAT_IRQ, 	.gpio_charger_enable = RAPH100_CHARGE_EN_N,@@ -348,6 +430,14 @@ static struct platform_device msm_device_buttons = { 		.platform_data  = &button_data,         } };++static struct platform_device diamond_camera = {+	.name		= "camera",+	.dev		= { +		.platform_data = &msm_camera_device,+	},+};+ static struct pwr_sink diamond_pwrsink_table[] = {         {                 .id     = PWRSINK_AUDIO,@@ -465,6 +555,8 @@ static struct platform_device *devices[] __initdata = { 	&android_pmem_adsp_device, 	&android_pmem_gpu0_device, 	&android_pmem_gpu1_device,+	//&android_pmem_camera_device,+	&diamond_camera, 	&raphael_rfkill, 	&msm_device_smd, 	&msm_device_nand,diff --git a/arch/arm/mach-msm/board-htcdiamond.h b/arch/arm/mach-msm/board-htcdiamond.hindex c2881d0..987937d 100644--- a/arch/arm/mach-msm/board-htcdiamond.h+++ b/arch/arm/mach-msm/board-htcdiamond.h@@ -30,11 +30,13 @@ #define MSM_FB_BASE		MSM_PMEM_ADSP_BASE + MSM_PMEM_ADSP_SIZE #define MSM_FB_SIZE		0x200000 /* 2mb */ +#define MSM_PMEM_CAMERA_BASE      MSM_FB_BASE + MSM_FB_SIZE+#define MSM_PMEM_CAMERA_SIZE      0x100000 /* 1mb */+ /* Define the EBI layout */ #define MSM_LINUX_BASE          MSM_EBI_BASE #define MSM_LINUX_SIZE          0x6b00000 /* 107mb */ - #define MSM_RAM_CONSOLE_BASE	0x00800000 #define MSM_RAM_CONSOLE_SIZE	0x00100000 // 1M at 0x00800000 @@ -134,6 +136,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/arch/arm/mach-msm/board-htcraphael-gps.c b/arch/arm/mach-msm/board-htcraphael-gps.cindex fc5b7c6..6aa87b2 100644diff --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;