diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/arm/boot/dts/omap3.dtsi | 6 | ||||
| -rw-r--r-- | arch/arm/boot/dts/omap3_h1.dts | 294 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/Kconfig | 29 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3h1-bluetooth.c | 8 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3h1.c | 827 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/opp.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/pm.c | 9 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/pm34xx.c | 84 | 
8 files changed, 369 insertions, 890 deletions
diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi index 4b59bcb8017..cae4e9725d0 100644 --- a/arch/arm/boot/dts/omap3.dtsi +++ b/arch/arm/boot/dts/omap3.dtsi @@ -225,9 +225,8 @@  			compatible = "ti,omap3-uart";  			ti,hwmods = "uart3";  			clock-frequency = <48000000>; -		}; -		*/ -        /* + }; */ +          		i2c1: i2c@48070000 {  			compatible = "ti,omap3-i2c";  			#address-cells = <1>; @@ -235,6 +234,7 @@  			ti,hwmods = "i2c1";  		}; +        /*  		i2c2: i2c@48072000 {  			compatible = "ti,omap3-i2c";  			#address-cells = <1>; diff --git a/arch/arm/boot/dts/omap3_h1.dts b/arch/arm/boot/dts/omap3_h1.dts index d9633598521..9111ebf872e 100644 --- a/arch/arm/boot/dts/omap3_h1.dts +++ b/arch/arm/boot/dts/omap3_h1.dts @@ -26,20 +26,68 @@  				 800000  1275000         		              /* 1000000 1337500 */  			>; +			cpu0-supply = <&omap_tps65910>;  			/* OPP tolerance in percentage */  			voltage-tolerance = <0>;  			reset-voltage = <1275000>;  		};  	}; +	vbat: fixedregulator@0 { +		compatible = "regulator-fixed"; +		regulator-name = "vbat"; +		regulator-min-microvolt = <3700000>; +		regulator-max-microvolt = <3700000>; +		regulator-boot-on; +	}; + +	omap_pimic { +		omap_tps65910: omap_vdd1 { +			compatible = "ti,omap-tps65910-vdd1"; +			ti,boot-voltage-micro-volts = <1275000>; +			ti,vp = <&vp_mpu>; +		}; + +		omap_tps65910_vdd2: omap_vdd2 { +			compatible = "ti,omap-tps65910-vdd2"; +			ti,boot-voltage-micro-volts = <1200000>; +			ti,vp = <&vp_core>; +		}; +	}; + +    /* Test code for the ACC input pin. Should be disabled when  +     * we're using the accelerometer. +     */ +     +    /* +    gpio_buttons: gpio_buttons@0 { +      compatible = "gpio-keys"; +      #address-cells = <1>; +      #size-cells = <0>; +     */ +      /*  +      interrupt-parent = <&gpio1>; +      interrupts = <31>; +      wakeup-source; +      */ +    /* +      power { +			label = "mattis_button"; +			linux,code = <116>; +			gpios = <&gpio1 31 1>; +			gpio-key,wakeup; +         }; +     };*/ + +  	pad-wkup {  		/* on omap, the irqs are calculated as follows:  		 * for the 96 intc IRQs  		 *   irq = 16 + irq_offset (from TRM sec 12.3.2) -		 * for a gpio IRQ (banks numbered 1 to 6 -		 *   irq = 16 + 96 + (gpio_bank - 1) * 32 +		 * for a gpio IRQ (banks numbered 1 to 6) +		 *   irq = 16 + 96 + (gpio_bank - 1) * 32 + GPIO no.  		 */ -		compatible = "ti,pad-wkup"; +        compatible = "ti,pad-wkup";  		/* Map the pad offset (off) to an interrupt (IRQ).    */  		/* if handle is 1, an irq will be generated based on  */ @@ -53,8 +101,9 @@  		/*                                                    */  		/*             off  IRQ handle                        */  		ti,pad_irq = <0x16e  90  1>, /* uart3 - serial rx     */ -                     <0x9f6  143 1>, /* mpu6515 irq pin       */ -                     <0x9f4  123 1>; /* BT host wake          */ +                     <0x9f6  143 1>, /* mpu6515 irq pin - is this offset correct?      */ +                     <0x9f4  123 1>, /* BT host wake          */ +                     <0x1b0  23  1>; /* sys_nirq              */  	};  }; @@ -117,14 +166,15 @@  			0x1a0 0x000	/* MCSPI1_CS1, MODE0 | OUTPUT */                          /* CKE pin for memory */ -                        0x232 0x000	/* SDRC_CKE0, MODE0 | OUTPUT */ -                        0x234 0x000	/* SDRC_CKE1, MODE0 | OUTPUT */ +            0x232 0x000	/* SDRC_CKE0, MODE0 | OUTPUT */ +            0x234 0x000	/* SDRC_CKE1, MODE0 | OUTPUT */  			/* touch reset */  			0x0f2 0x11c	/* CAM_D6, MODE4 | INPUT_PULLUP */  			0x5ba 0x004	/* ETK_D7, MODE4 | OUTPUT */ -			0x1b0 0x100	/* SYS_NIRQ, MODE0 | INPUT */ +			0x1b0 0xc100	/* SYS_NIRQ, MODE0 | INPUT | OFFWAKEUP */ +  			0x0dc 0x004	/* CAM_HS, MODE4 | OUTPUT */                                /* USB */ @@ -157,10 +207,28 @@              /* BT_HOST_WAKE */              /*0x9f4 0x4104 */ /* JTAG_EMU0 , (OMAP_MUX_MODE4 | OMAP_PIN_INPUT | OMAP_WAKEUPENABLE) */              /* Accelerometer interrupt */ -            /*0x9f6 0x4104 */    /* JTAG_EMU1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT |  -                               OMAP_PIN_OFF_WAKEUPENABLE */ + +            /* I've tried configuring this both in the wkup pinmux (below) and here, +             but this location makes it not function as an interrupt... ??? */ +            /* 0x9f6 0x4104 */    /* JTAG_EMU1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT |  +                                     OMAP_PIN_OFF_WAKEUPENABLE */  	    >;  	}; + +	i2c1_pins: pinmux_i2c1_pins { +		pinctrl-single,pins = < +			0x18a 0x118     /* I2C1_SCL, MODE0 | INPUT_PULLUP */ +			0x18c 0x118     /* I2C1_SCA, MODE0 | INPUT_PULLUP */ +		>; +	}; +     +    /* +	i2c2_pins: pinmux_i2c2_pins { +		pinctrl-single,pins = < +        0x18e 0x118 */     /* I2C2_SCL, MODE0 | INPUT_PULLUP */ +			/* 0x190 0x118 */     /* I2C2_SDA, MODE0 | INPUT_PULLUP */ +	/* 	>; */ +	/* }; */  }; @@ -168,7 +236,7 @@  	pinctrl-names = "default";  	pinctrl-0 = <&wkup_pins>; -	wkup_pins: pinmux_wakeup_pins { +    wkup_pins: pinmux_wakeup_pins {  		pinctrl-single,pins = <  			0x006 0x008     /* SYS_CLKREQ, MODE0 | PULLDOWN */  			0x018 0x000     /* SYS_OFF_MODE, MODE0 */ @@ -177,18 +245,160 @@              0x024 0x4104    /* JTAG_EMU0, OMAP_MUX_MODE4 | OMAP_PIN_INPUT |                               OMAP_PIN_OFF_WAKEUPENABLE */                 /* Accelerometer interrupt */ -            0x026 0x4104    /* JTAG_EMU1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT |  +            0x026 0x410C    /* JTAG_EMU1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT |                                  OMAP_PIN_OFF_WAKEUPENABLE */  		>;  	};  }; +&i2c1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&i2c1_pins>; + +	status = "okay"; +	clock-frequency = <400000>; + +	tps: tps@2d { +		reg = <0x2d>; +	}; +}; + +/include/ "tps65910.dtsi" + +&tps { +	interrupts = <7>;       /* SYS_NIRQ */ +	interrupt-parent = <&intc>; + +	#interrupt-cells = <2>; +	interrupt-controller; + +	ti,en-ck32k-xtal; +	/* set SR_CTL_I2C_SEL - access to smartreflex registers by control i2c */ +	ti,system-power-controller; + +	vcc1-supply = <&vbat>; +	vcc2-supply = <&vbat>; +	vcc3-supply = <&vbat>; +	vcc4-supply = <&vbat>; +	vcc5-supply = <&vbat>; +	vcc6-supply = <&vbat>; +	vcc7-supply = <&vbat>; +	vccio-supply = <&vbat>; + +	regulators { +		vrtc_reg: regulator@0 { +			regulator-always-on; +		}; + +        /* DSS is on this one */ +		vio_reg: regulator@1 { +            regulator-name = "vdds_dsi"; +			regulator-min-microvolt = <1800000>; +			regulator-max-microvolt = <1800000>; +			regulator-always-on; +		}; + +      /* Leave one and two on for reliable wake-up */ + +		vdd1_reg: regulator@2 { +			/* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */ +			/* +			regulator-boot-on; +			regulator-always-on; +			*/ +			/* external sleep control by means of SYS_OFF_MODE signal */ +		    regulator-name = "vdd_mpu_iva";	 +            regulator-min-microvolt = <900000>; +			regulator-max-microvolt = <1350000>; +			/* ti,regulator-ext-sleep-control = <8>; */ +		}; + +		vdd2_reg: regulator@3 { +			/* VDD_CORE voltage limits 0.95V - 1.1V with +/-4% tolerance */ +			/* +			regulator-boot-on; +			regulator-always-on; +			*/ +			/* external sleep control by means of SYS_OFF_MODE signal */ +			regulator-name = "vdd_core"; +			regulator-min-microvolt = <900000>; +			regulator-max-microvolt = <1200000>; +			/* ti,regulator-ext-sleep-control = <8>; */ +		}; + +      /* not used, I think */ +		vdd3_reg: regulator@4 { +            status = "disabled"; +			ti,regulator-ext-sleep-control = <8>; +		}; + +      /* This is the accelerometer. We always want it on. */ +		vdig1_reg: regulator@5 { +			regulator-min-microvolt = <1800000>; +			regulator-max-microvolt = <1800000>; +            regulator-always-on; +		}; + +		/* vdig2_reg: regulator@6 {}; unused */ +		vdig2_reg: regulator@6 { +			status = "disabled"; +			ti,regulator-ext-sleep-control = <8>; +		}; + +      /* Nobody is explicitly using this rail, but it seems like it goes to  +       * VDDA_DPLL_PER on the chip. So we need it. +       */ +		vpll_reg: regulator@7 { +			regulator-min-microvolt = <1800000>; +			regulator-max-microvolt = <1800000>;     +			ti,regulator-ext-sleep-control = <8>; +		}; + +		/* vdac_reg: regulator@8 {}; unused */ +		vdac_reg: regulator@8 { +			status = "disabled"; +			ti,regulator-ext-sleep-control = <8>; +		}; + +        vaux1_reg: regulator@9 { /* not used, 2.85V by default */ +            status = "disabled"; +			ti,regulator-ext-sleep-control = <8>; +		}; + +		vaux2_reg: regulator@10 { +        regulator-name = "vaux2"; +			regulator-min-microvolt = <3300000>; +			regulator-max-microvolt = <3300000>; +			regulator-always-on; +			ti,regulator-ext-sleep-control = <8>; +		}; + +		vaux33_reg: regulator@11 { +			regulator-min-microvolt = <3300000>; +			regulator-max-microvolt = <3300000>; +			regulator-always-on; +			ti,regulator-ext-sleep-control = <8>; +		}; + +      /* This one goes to both SPI (for DSS) and touch. How can I  +       * specify two consumers in DT? (vdd for dss, avdd for touch).  +       */ +		vmmc_reg: regulator@12 { +			regulator-min-microvolt = <3300000>; +			regulator-max-microvolt = <3300000>; +			regulator-always-on; +			ti,regulator-ext-sleep-control = <8>; +		}; +	}; +}; + +  /* leave gpio bank interface clocks on during suspend   * to avoid race condition in gpio_irq_handler */  &gpio1 { -	ti,no_idle_on_suspend; -}; +    ti,no_idle_on_suspend; +    };  &gpio2 {  	ti,no_idle_on_suspend; @@ -224,59 +434,3 @@  }; -#if 0 /* Not currently used */ -&i2c1 { -	/* clock-frequency = <400000>; */ -    /* PMIC ONLY */ -}; - - -/* I2C-2 has everything other than PMIC. */ - -&i2c2 { -	clock-frequency = <400000>; - -	mxt224@4a { /* Taken from Minnow, needs to be updated */ -        compatible = "atmel,maxtouch";  /* OLIO */ -        reg = <0x4a>; /* OLIO */ -		interrupt-parent = <&gpio4>; -		interrupts = <3 0>;  /* gpio-99 32 * 3 + 3 */ -		wakeup-source;  -        atmel,cfg-name = "";  /* needs setting, OLIO */ -        atmel,reset_gpio = <>;  /* needs setting, OLIO */ - -        /* below is from minnow */ - -		/* gpios = <&gpio4 3 0>, /\* IRQ   gpio-099 *\/ */ -		/* 	<&gpio6 4 0>; /\* RESET gpio-164*\/ */ - -		/* pinctrl-names = "pullup", "pulldown"; */ -		/* pinctrl-0 = <&atmxt_int_pullup>; */ -		/* pinctrl-1 = <&atmxt_int_pulldown>; */ -		/* support-snowflake = <1>; */ -	}; - -    mpu6515@68 { -    }; - -    /* This driver does not yet support device tree  -    lm3530-led@38 { -     };*/ - -    /* This driver does not yet support device tree  -    cm3391@10 { -     };*/ -     -     - -}; - -&i2c3 { -	clock-frequency = <400000>; -     -    /* This driver does not yet support device tree  -    bq274xx@55 { -     }; */ -}; - -#endif  diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index c3fdbc0f08a..2793feafaae 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -216,7 +216,7 @@ config MACH_OMAP3_H1  choice         prompt "Olio H1B build version" -       default MACH_OMAP3_H1_EVT2 +       default MACH_OMAP3_H1_PV2  config MACH_OMAP3_H1_EVT1         bool "EVT1 Build of the H1 board" @@ -231,9 +231,32 @@ config MACH_OMAP3_H1_DVT1         depends on MACH_OMAP3_H1  config MACH_OMAP3_H1_DVT2 -	   bool "DVT2 Build of the H1 board" -	   depends on MACH_OMAP3_H1 +       bool "DVT2 Build of the H1 board" +       depends on MACH_OMAP3_H1 + +config MACH_OMAP3_H1_PV +       bool "PV Build of the H1 board" +       depends on MACH_OMAP3_H1 +endchoice + +choice +       prompt "Olio H1B PV build version" + +config MACH_OMAP3_H1_PV1 +       bool "PV Board with Invensense accelerometer." +       depends on MACH_OMAP3_H1_PV +       help +         This is our first PV board, with Invensense accelerometer. Hopefully  +         it'll be extinct soon. Don't forget to add the invensense driver to  +         the kernel as well. +config MACH_OMAP3_H1_PV2 +       bool "PV Board with ST accelerometer." +       depends on MACH_OMAP3_H1_PV +       help  +         This is the better PV board, with a more capable accelerometer from ST. +         Might be our last board! Don't forget to configure the accelerometer in +         the kernel as well.  endchoice  config MACH_DEVKIT8000 diff --git a/arch/arm/mach-omap2/board-omap3h1-bluetooth.c b/arch/arm/mach-omap2/board-omap3h1-bluetooth.c index 6c4a13ec093..84108a79258 100644 --- a/arch/arm/mach-omap2/board-omap3h1-bluetooth.c +++ b/arch/arm/mach-omap2/board-omap3h1-bluetooth.c @@ -45,6 +45,7 @@ static void update_host_wake_locked(int);  #define BT_RESET_GPIO 179  #define BT_REG_GPIO 180 +#define BT_RESET_GPIO 179  #define BT_WAKE_GPIO 93  #define BT_HOST_WAKE_GPIO 11  #define UART_PORT 1 @@ -71,11 +72,12 @@ struct bcm_bt_lpm {  static int bcm20702_bt_rfkill_set_power(void *data, bool blocked)  { -	// rfkill_ops callback. Turn transmitter on when blocked is false +    // rfkill_ops callback. Turn transmitter on when blocked is false  	if (!blocked) {  		if (clk32ksys_reg && !bt_enabled)  			regulator_enable(clk32ksys_reg); +        gpio_set_value(BT_RESET_GPIO, 1);  		gpio_set_value(BT_REG_GPIO, 1);  		gpio_set_value(BT_RESET_GPIO, 1); @@ -83,6 +85,7 @@ static int bcm20702_bt_rfkill_set_power(void *data, bool blocked)  		// Chip won't toggle host_wake after reset.  Make sure  		// we don't hold the wake_lock until chip wakes up again.  		update_host_wake_locked(0); +  		gpio_set_value(BT_RESET_GPIO, 0);  		gpio_set_value(BT_REG_GPIO, 0);  		if (clk32ksys_reg && bt_enabled) @@ -261,6 +264,7 @@ static int bcm20702_bluetooth_probe(struct platform_device *pdev)  	int ret = 0;  	rc = gpio_request(BT_RESET_GPIO, "bcm20702_nreset_gpip"); +  	if (unlikely(rc)) {  		return rc;  	} @@ -341,7 +345,7 @@ int bcm4430_bluetooth_suspend(struct platform_device *pdev, pm_message_t state)  	int host_wake;  	disable_irq(irq); -	host_wake = gpio_get_value(BT_HOST_WAKE_GPIO); /* Never goes low - what's up? */ +	host_wake = gpio_get_value(BT_HOST_WAKE_GPIO);   	if (host_wake) {  		enable_irq(irq); diff --git a/arch/arm/mach-omap2/board-omap3h1.c b/arch/arm/mach-omap2/board-omap3h1.c index 8af16ed1dda..0d3214c4150 100644 --- a/arch/arm/mach-omap2/board-omap3h1.c +++ b/arch/arm/mach-omap2/board-omap3h1.c @@ -82,18 +82,18 @@  #define DEFAULT_RXDMA_BUFSIZE		4096	/* RX DMA buffer size */  #define DEFAULT_RXDMA_TIMEOUT		(3 * HZ)/* RX DMA timeout (jiffies) */ -#if defined(CONFIG_MACH_OMAP3_H1_DVT1) || defined(CONFIG_MACH_OMAP3_H1_DVT2) +#if defined(CONFIG_MACH_OMAP3_H1_DVT1) || defined(CONFIG_MACH_OMAP3_H1_DVT2) || defined (CONFIG_MACH_OMAP3_H1_PV)  #define LCD_RESET_GPIO 94  #else   #define LCD_RESET_GPIO 122  #endif -static struct accelerometer_wake { -  int awake; -  struct wake_lock lock; -  char lock_name[100]; -  int user_pid; -} acc_wake; +static struct of_device_id omap_dt_match_table[] __initdata = { +	{ .compatible = "olio,omap3-h1", }, +	{ .compatible = "simple-bus", }, +	{ .compatible = "ti,omap-infra", }, +	{ } +};  static struct mtd_partition omap3h1_nand_partitions[] = {  	/* All the partition sizes are listed in terms of NAND block size */ @@ -185,6 +185,7 @@ static int __init omap3h1_spi_init(void) {   * (0 means VLogic, which I'm not sure what it is).   */ +#ifndef CONFIG_MACH_OMAP3_H1_PV2   static struct mpu_platform_data mpu_data = {  	.int_config  = 0x00,  	.level_shifter = 1, @@ -192,6 +193,7 @@ static struct mpu_platform_data mpu_data = {  					 -1,  0,  0,  					  0,  0,  1 },  }; +#endif  static struct lm3530_platform_data omap3h1_backlight_platform_data = {  	.mode = LM3530_BL_MODE_MANUAL, @@ -259,492 +261,6 @@ static struct platform_device nop_phy_device = {  /* }; */ -/* --------------------------------------------------------------------------- */ -/* REGULATOR - Fixed first - */ - -static struct regulator_init_data omap3h1_vbat_data = { -    .constraints.always_on = true, -    .constraints.valid_modes_mask = REGULATOR_MODE_NORMAL, -    .constraints.valid_ops_mask = REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS, -}; - -static struct fixed_voltage_config omap3h1_vbat_pdata = { -	.supply_name	= "VBAT", -	.microvolts   	= 3800000, -	.init_data	    = &omap3h1_vbat_data, -	.gpio		    = -EINVAL, -}; - -static struct platform_device omap3h1_vbat = { -	.name	= "reg-fixed-voltage", -	.id		= -1, -	.dev = { -		.platform_data = &omap3h1_vbat_pdata, -	}, -}; - - -/* --------------------------------------------------------------------------- */ - -static struct regulator_init_data tps65910_dummy = { -	.supply_regulator = "VBAT", -    .constraints.always_on  = false, -    .constraints.valid_ops_mask = REGULATOR_CHANGE_STATUS, -}; - -/* --------------------------------------------------------------------------- */ -/* This one is required for the display to work. - */ - -static struct regulator_consumer_supply tps65910_touch3_supply[] = { -    REGULATOR_SUPPLY("avdd", "2-004a"), -    REGULATOR_SUPPLY("vdd", "spi1.1"), -}; - -static struct regulator_init_data tps65910_touch3 = { -	.supply_regulator = "VBAT", -    .constraints = { -        .min_uV            = 3300000, -        .max_uV            = 3300000, -        .valid_modes_mask  = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY, -        .valid_ops_mask    = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_MODE, -        .always_on         = false, -        .apply_uV		   = true, - -        .state_mem         = { -            .uV = 0, -            .mode = REGULATOR_MODE_STANDBY, -            .disabled = 1, -        }, -        .state_disk        = { -            .uV = 0, -            .mode = REGULATOR_MODE_STANDBY, -            .disabled = 1, -        }, -        .state_standby     = { -            .uV = 0, -            .mode = REGULATOR_MODE_STANDBY, -            .disabled = 1, -        }, -    }, - -    .num_consumer_supplies = ARRAY_SIZE(tps65910_touch3_supply), -    .consumer_supplies     = tps65910_touch3_supply, -}; - -/* --------------------------------------------------------------------------- */ -/* This regulator is for the vibrator. We currently lack a way of enabling / - * disabling this since we lack a driver for the vibrator (we're just accessing - * it's registers through the i2c bus).  - *  - * Hence, it's always on. - */ - -static struct regulator_consumer_supply tps65910_vibrator_supply[] = { -      REGULATOR_SUPPLY("vaux2", "drv2605"), -}; - -static struct regulator_init_data tps65910_vibrator = { -	.supply_regulator = "VBAT", -    .constraints = { -        .min_uV            = 3300000, -        .max_uV            = 3300000, -        .valid_modes_mask  = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY, -        .valid_ops_mask    = REGULATOR_CHANGE_MODE, -        .always_on         = false, -        .apply_uV		   = true, - -        .state_mem         = { -            .disabled = 1, -        }, -        .state_disk        = { -            .disabled = 1, -        }, -        .state_standby     = { -            .disabled = 1, -        }, -    }, -    .num_consumer_supplies = ARRAY_SIZE(tps65910_vibrator_supply), -    .consumer_supplies     = tps65910_vibrator_supply, -}; - - - -/* --------------------------------------------------------------------------- */ -/* Seems like this one has to be on. It doesn't have any "official" consumers - * ... but it's definitely needed. Bluetooth relies on it. - */ - -/* -static struct regulator_consumer_supply tps65910_bluetooth_3v3[] = { -      REGULATOR_SUPPLY("clk32ksys", 0), -}; -*/ - -static struct regulator_init_data tps65910_3v3 = { -	.supply_regulator = "VBAT", -    .constraints = { -        .min_uV            = 3300000, -        .max_uV            = 3300000, -        .valid_modes_mask  = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY, -        .valid_ops_mask    = REGULATOR_CHANGE_MODE    |  -                             REGULATOR_CHANGE_STATUS, -        .always_on         = true, -        .apply_uV		   = true, - -        .state_mem         = { -            .disabled = 1, -        }, -        .state_disk        = { -            .disabled = 1, -        }, -        .state_standby     = { -            .disabled = 1, -        }, -    }, -     -}; - - -/* --------------------------------------------------------------------------- */ -/* This is the OMAP display subsystem. Part of the OMAP processor OCP stuff. - * USB also depends on this, so if you want to transfer files it has to be  - * always on. - * NAND flash and UART3 (which we don't use) requires it  - * as well. And the i2c bus, and lots of other stuff. - *  - * Setting always_on to "false" resulted in almost no power savings, at - * least in the current setting.  - */ - -static struct regulator_consumer_supply tps65910_1v8_supply[] = { -    REGULATOR_SUPPLY("vdds_dsi", "omapdss"), -}; - -static struct regulator_init_data tps65910_1v8 = { -	.supply_regulator = "VBAT", -    .constraints = { -        .min_uV            = 1800000, -        .max_uV            = 1800000, -        .valid_modes_mask  = REGULATOR_MODE_NORMAL | REGULATOR_MODE_IDLE |  REGULATOR_MODE_STANDBY, -        .valid_ops_mask    = REGULATOR_CHANGE_MODE,  -        .always_on         = true, -        .apply_uV		   = true, -    }, -    .num_consumer_supplies = ARRAY_SIZE(tps65910_1v8_supply), -    .consumer_supplies     = tps65910_1v8_supply, -}; - -/* --------------------------------------------------------------------------- */ -/* There's no driver explicitly using this one, but it goes to VDDA_DPLL_PER  - * on the OMAP chip. So it's used internally by the DPLL devices in PER, I think. - */ - -static struct regulator_consumer_supply tps65910_vpll_supply[] = { - -}; - -static struct regulator_init_data tps65910_vpll = { -	.supply_regulator = "VBAT", -    .constraints = { -        .min_uV            = 1800000, -        .max_uV            = 1800000, -        .valid_modes_mask  = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY, -        .valid_ops_mask    = REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS, -        .always_on         = true, -        .apply_uV		   = true, -    }, -    .num_consumer_supplies = ARRAY_SIZE(tps65910_vpll_supply), -    .consumer_supplies     = tps65910_vpll_supply, -}; - - -/* --------------------------------------------------------------------------- */ -/* Touch power supply part 2. - */ - -static struct regulator_consumer_supply tps65910_touch_supply[] = { -    REGULATOR_SUPPLY("vdd", "2-004a" ), -}; - -static struct regulator_init_data tps65910_touch = { -	.supply_regulator = "VBAT", -    .constraints = { -        .min_uV            = 1800000, -        .max_uV            = 1800000, -        .valid_modes_mask  = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY, -        .valid_ops_mask    = REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS, -        .always_on         = false, -        .apply_uV		   = true, - -        .state_mem         = { -            .uV = 1, -            .mode = REGULATOR_MODE_STANDBY, -            .disabled = 1, -        }, -        .state_disk        = { -            .uV = 1, -            .mode = REGULATOR_MODE_STANDBY, -            .disabled = 1, -        }, -        .state_standby     = { -            .uV = 1, -            .mode = REGULATOR_MODE_STANDBY, -            .disabled = 1, -        }, - -    }, -    .num_consumer_supplies = ARRAY_SIZE(tps65910_touch_supply), -    .consumer_supplies     = tps65910_touch_supply, -}; - -/* =========================================================================== */ - -/* --------------------------------------------------------------------------- */ - -/* This one only works if 'always_on' is set to true. Do I need to do something - * special otherwise to turn it on? Maybe the driver doesn't enable it. - *  - * The accelerometer driver isn't using regulators properly, hence this needs to - * be always on. - */ - -static struct regulator_consumer_supply tps65910_accel_supply[] = { -     REGULATOR_SUPPLY("vdd", "mpu6515"), -}; - -static struct regulator_init_data tps65910_accel = { -	.supply_regulator = "VBAT", -    .constraints = { -        .min_uV            = 1800000, -        .max_uV            = 1800000, -        .valid_modes_mask  = REGULATOR_MODE_NORMAL | REGULATOR_MODE_IDLE | REGULATOR_MODE_STANDBY, -        .valid_ops_mask    = REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS, -        .always_on         = true, -        .apply_uV		   = true, - -        .state_mem         = { -            .uV = 1, -            .mode = REGULATOR_MODE_STANDBY, -            .disabled = 1, -        }, -        .state_disk        = { -            .uV = 1, -            .mode = REGULATOR_MODE_STANDBY, -            .disabled = 1, -        }, -        .state_standby     = { -            .uV = 1, -            .mode = REGULATOR_MODE_STANDBY, -            .disabled = 1, -        }, -    }, -    .num_consumer_supplies = ARRAY_SIZE(tps65910_accel_supply), -    .consumer_supplies     = tps65910_accel_supply, -}; - -/* --------------------------------------------------------------------------- */ -/* Supplies the MPU PD and friends.  - */ - -static struct regulator_consumer_supply tps65910_vdd1_supply[] = { -    REGULATOR_SUPPLY("vcc", "cpu0"), -}; - -static struct regulator_init_data tps65910_vdd1 = { -	.supply_regulator = "VBAT", -    .constraints = { -        .name              = "vdd_mpu_iva", -        .min_uV            = 900000, -        .max_uV            = 1350000, -        .valid_modes_mask  = REGULATOR_MODE_NORMAL | REGULATOR_MODE_FAST, -        .valid_ops_mask    = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS, -        .always_on         = false, - -        .state_mem         = { -            .mode = REGULATOR_MODE_STANDBY, -            .enabled = 1, -            .disabled = 0, -        }, -        .state_disk        = { -            .mode = REGULATOR_MODE_STANDBY, -            .enabled = 1, -            .disabled = 0, -        }, -        .state_standby     = { -            .mode = REGULATOR_MODE_STANDBY, -            .enabled = 1, -            .disabled = 0, -        }, -    }, - -    .num_consumer_supplies = ARRAY_SIZE(tps65910_vdd1_supply), -    .consumer_supplies     = tps65910_vdd1_supply, -}; - -/* --------------------------------------------------------------------------- */ -/* I seem to need always on, but the TWL code gets by without it. So...  - */ - -static struct regulator_consumer_supply tps65910_vdd2_supply[] = { -    REGULATOR_SUPPLY("vdd_core", "l3_main.0"), -}; - -static struct regulator_init_data tps65910_vdd2 = { -	.supply_regulator = "VBAT", -    .constraints = { -        .name              = "vdd_core", -        .min_uV            = 900000, -        .max_uV            = 1200000, -        .valid_modes_mask  = REGULATOR_MODE_NORMAL | REGULATOR_MODE_FAST, -        .valid_ops_mask    = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS, -        .always_on         = false, - -        .state_mem         = { -            .mode = REGULATOR_MODE_STANDBY, -            .enabled = 1, -            .disabled = 0, -        }, -        .state_disk        = { -            .mode = REGULATOR_MODE_STANDBY, -            .enabled = 1, -            .disabled = 0, -        }, -        .state_standby     = { -    .mode = REGULATOR_MODE_STANDBY, -            .enabled = 1, -            .disabled = 0, -        }, -    }, -     -    .num_consumer_supplies = ARRAY_SIZE(tps65910_vdd2_supply), -    .consumer_supplies     = tps65910_vdd2_supply, -}; - -/* --------------------------------------------------------------------------- */ - -/* The clock has to be ON, probably because we're not enabling it properly. */ -/* If I set i2chs_keepon to 6, UBIfs fails to mount (!?). Again, probably - * not enabling it properly.  - *  - * And even with therm set, the screen acts weird (looking really dark during - * boot, touch not working when up).  - */ - -/* -static struct tps65910_sleep_keepon_data olio_slp_keepon = { -    .therm_keepon = 0, -    .clkout32k_keepon = 0,   -    .i2chs_keepon = 1, - };*/ - - - -static struct tps65910_board omap3h1_tps65910_pdata = { -    /* .irq = 7 + OMAP_INTC_START, */ /* Getting this at runtime instead. */ -	.en_ck32k_xtal = true, -    /* .en_dev_slp = true, */ -     -    /* .slp_keepon = &olio_slp_keepon, */ - -    .tps65910_pmic_init_data[TPS65910_REG_VIO]      = &tps65910_1v8, -    .tps65910_pmic_init_data[TPS65910_REG_VDD1]     = &tps65910_vdd1, -    .tps65910_pmic_init_data[TPS65910_REG_VDD2]     = &tps65910_vdd2, -    .tps65910_pmic_init_data[TPS65910_REG_VDIG1]    = &tps65910_accel, -    .tps65910_pmic_init_data[TPS65910_REG_VDIG2]    = &tps65910_touch, -    .tps65910_pmic_init_data[TPS65910_REG_VPLL]     = &tps65910_vpll, - -    .tps65910_pmic_init_data[TPS65910_REG_VMMC]     = &tps65910_touch3, -    .tps65910_pmic_init_data[TPS65910_REG_VAUX2]    = &tps65910_vibrator, -     -    /* This one is connected to BT ... maybe more? */ -     -    .tps65910_pmic_init_data[TPS65910_REG_VAUX33]   = &tps65910_3v3, - -    /* not actually used */ - -    .tps65910_pmic_init_data[TPS65910_REG_VRTC]     = &tps65910_dummy, -    .tps65910_pmic_init_data[TPS65910_REG_VDAC]     = &tps65910_dummy, -    .tps65910_pmic_init_data[TPS65910_REG_VAUX1]    = &tps65910_dummy, /* 2v85 */ -    .tps65910_pmic_init_data[TPS65910_REG_VDD3]     = &tps65910_dummy, -     -    .pm_off = true, -}; - - -/* ====================================================================== */ -/* Voltage domain settings  */ - - -#define OMAP3_SRI2C_SLAVE_ADDR		0x12 -#define OMAP3_VDD_MPU_SR_CONTROL_REG	0x00 -#define OMAP3_VDD_CORE_SR_CONTROL_REG	0x01 -#define OMAP3_VP_CONFIG_ERROROFFSET	0x00 -#define OMAP3_VP_VSTEPMIN_VSTEPMIN	0x1 -#define OMAP3_VP_VSTEPMAX_VSTEPMAX	0x04 -#define OMAP3_VP_VLIMITTO_TIMEOUT_US	200 - - -static unsigned long olio_vsel_to_uv(const u8 vsel) -{ -	return (((vsel * 125) + 6000)) * 100; -} - -static u8 olio_uv_to_vsel(unsigned long uv) -{ -	return DIV_ROUND_UP(uv - 600000, 12500); -} - - -static struct omap_voltdm_pmic omap3_mpu_pmic = { -	.slew_rate		= 12500, -	.step_size		= 12500, -	.vp_erroroffset		= OMAP3_VP_CONFIG_ERROROFFSET, -	.vp_vstepmin		= OMAP3_VP_VSTEPMIN_VSTEPMIN, -	.vp_vstepmax		= OMAP3_VP_VSTEPMAX_VSTEPMAX, -	.vddmin			= 900000, -	.vddmax			= 1350000, -	.vp_timeout_us		= OMAP3_VP_VLIMITTO_TIMEOUT_US, -	.i2c_slave_addr		= OMAP3_SRI2C_SLAVE_ADDR, -	.volt_reg_addr		= OMAP3_VDD_MPU_SR_CONTROL_REG, -	.i2c_high_speed		= true, -	.vsel_to_uv		= olio_vsel_to_uv, -	.uv_to_vsel		= olio_uv_to_vsel, -}; - -static struct omap_voltdm_pmic omap3_core_pmic = { -	.slew_rate		= 12500, -	.step_size		= 12500, -	.vp_erroroffset		= OMAP3_VP_CONFIG_ERROROFFSET, -	.vp_vstepmin		= OMAP3_VP_VSTEPMIN_VSTEPMIN, -	.vp_vstepmax		= OMAP3_VP_VSTEPMAX_VSTEPMAX, -	.vddmin			= 900000, -	.vddmax			= 1200000, -	.vp_timeout_us		= OMAP3_VP_VLIMITTO_TIMEOUT_US, -	.i2c_slave_addr		= OMAP3_SRI2C_SLAVE_ADDR, -	.volt_reg_addr		= OMAP3_VDD_CORE_SR_CONTROL_REG, -	.i2c_high_speed		= true, -	.vsel_to_uv		= olio_vsel_to_uv, -	.uv_to_vsel		= olio_uv_to_vsel, -}; - -int __init omap3_voltdm_init(void) -{ -	struct voltagedomain *voltdm; - -	if (!cpu_is_omap34xx()) -		return -ENODEV; - -	voltdm = voltdm_lookup("mpu_iva"); -	omap_voltage_register_pmic(voltdm, &omap3_mpu_pmic); - -	voltdm = voltdm_lookup("core"); -	omap_voltage_register_pmic(voltdm, &omap3_core_pmic); - -	return 0; -} -  /* ====================================================================== */ @@ -752,18 +268,18 @@ int __init omap3_voltdm_init(void)  static struct i2c_board_info __initdata omap3h1_i2c1_board_info[] = {           { -            I2C_BOARD_INFO("tps65910", 0x2d), -            .platform_data = &omap3h1_tps65910_pdata,           }, -#ifdef CONFIG_MACH_OMAP3_H1_DVT2 +#if defined (CONFIG_MACH_OMAP3_H1_DVT2) || defined (CONFIG_MACH_OMAP3_H1_PV)  };  static struct i2c_board_info __initdata omap3h1_i2c2_board_info[] = {  #endif      { +#ifdef CONFIG_MACH_OMAP3_H1_PV2          I2C_BOARD_INFO("lsm6ds3", 0x6a), -        // This is needed for the interrupt wake. IH_GPIO_BASE changed in 3.10  -        // .irq = (IH_GPIO_BASE + MPUIRQ_GPIO), -        //.platform_data = &mpu_data, +#else +        I2C_BOARD_INFO("mpu6515", 0x68), +        .platform_data = &mpu_data, +#endif      },      {           /* Backlight */ @@ -786,197 +302,6 @@ static struct i2c_board_info __initdata omap3h1_i2c3_board_info[] = {      },  }; -#ifdef ONLY_KEEPING_THIS_STUFF_FOR_NOSTALGIC_REASONS - -/* --------------------------------------------------------------------------- */ -/* Create debugfs entry  - *  - * We need to have this so that our wake-up thread can tell us it's PID.  - * That PID will then be used when waking the system up. - */ - -struct dentry * pidfile; - -#define SIG_OLIO_WAKE 44	// we choose 44 as our signal number (real-time signals are in the range of 33 to 64) - -static ssize_t write_pid(struct file *file,  -                         const char __user *buf, -                         size_t count,  -                         loff_t *ppos) -{ -	char mybuf[10]; -	int pid = 0; - -	/* read the value from user space */ - -	if(count > 10) -      return -EINVAL; -	if (copy_from_user(mybuf, buf, count) != 0) { -      /* nothing read?? */ -      printk ("OLIO: write_pid: Error??\n"); -      return 0; -    } - -	sscanf(mybuf, "%d", &pid); -	 -    printk("pid read = %d\n", pid); -     -    acc_wake.user_pid = pid; - -	return count; -} - -static ssize_t send_wake_signal (void) { -    int ret; -	struct siginfo info; -	struct task_struct *t; - -	/* send the signal */ - -    printk ("Now sending signal!\n"); - -	memset(&info, 0, sizeof(struct siginfo)); - -    /* this is bit of a trickery: SI_QUEUE is normally used by sigqueue from user space, -     * and kernel space should use SI_KERNEL. But if SI_KERNEL is used the real_time data  -     * is not delivered to the user space signal handler function.  -     */ - -	info.si_signo = SIG_OLIO_WAKE; -	info.si_code  = SI_QUEUE; - -  	/* real time signals may have 32 bits of data. */ - -	info.si_int = 1234; - -	rcu_read_lock(); - -	t = pid_task(find_pid_ns(acc_wake.user_pid, &init_pid_ns), PIDTYPE_PID);	 - -	if(t == NULL){ -        rcu_read_unlock(); -		printk("no such pid\n"); -		return -ENODEV; -	} - -    rcu_read_unlock(); - -    /* send the signal */ - -	ret = send_sig_info(SIG_OLIO_WAKE, &info, t); - -	if (ret < 0) { -		printk("error sending signal\n"); -	} -    return ret; -} - -static const struct file_operations h1_fops = { -    .write = write_pid, -}; - - -/*************************************************************************** - * acc_irq_handler - handle interrupt from accelerometer - *  - * This routine gets called when an interrupt from the accelerometer  - * happens. Time out is in milliseconds. - *  - * TODO: BREAK this all out, place it in it's own kernel driver together - * with the configuration stuff for the accelerometer (the low power sleep  - * mode stuff). - */ - -#define OLIO_DOUBLE_TAP 500 -#define OLIO_ONE_SECOND 1000 -#define OLIO_DT_WAIT 3000 - -static unsigned long previous; -static unsigned long previous_double; - -static irqreturn_t acc_irq_handler_thr(int irq, void * omap3h1_d) { -  /* struct platform_device** omap3h1_devs = (struct platform_device **) omap3h1_d; */ - -  int ret = 99; -  unsigned long now; - -  printk (KERN_DEBUG "acc_irq_handler_thr: Entered!\n"); - -  now = jiffies; - -  if (jiffies_to_msecs(now - previous) < OLIO_DOUBLE_TAP) { - -    /* ignore double clicks that happens too soon from the previous one - -     * filters out inadvertent wake-ups  -     */ -     -    if (jiffies_to_msecs (now - previous_double) < OLIO_DT_WAIT) -    { -      previous = 0; -      return IRQ_HANDLED; -    } -     -    printk (KERN_DEBUG "Double tap detected!\n"); - -    /* We want to wake up. Take wake lock (and send signal to user space?) -     * BT driver only takes wake lock, then lets higher levels handle  -     * everything ... but what if there's nothing there to take the lock? -     */ -     -    send_wake_signal();     -     -    wake_lock_timeout (&acc_wake.lock, msecs_to_jiffies (20 * OLIO_ONE_SECOND)); -     -    previous_double = now; -    previous = 0; -  } else { -    previous = now; -  } - -  printk (KERN_DEBUG "acc_irq_handler_thr: Leaving! (ret = %d)\n", ret); - -  return IRQ_HANDLED; -} - -static irqreturn_t acc_irq_handler(int irq, void * omap3h1_d) { -  printk (KERN_DEBUG "acc_irq_handler: Entered!\n"); -   -  /* nothing to do, other than wake the main thread */ -   -  printk (KERN_DEBUG "acc_irq_handler: Leaving!\n"); -  return IRQ_WAKE_THREAD; -} - -static int __init omap3_acc_irq_init (int irq, void * dev_id) { -    irq_set_irq_wake(irq, 1); - -    if (request_threaded_irq (irq, acc_irq_handler,  -                              acc_irq_handler_thr,  -                              IRQF_SHARED | IRQF_TRIGGER_RISING,  -                              "acc_wake",  -                              dev_id)) { -      printk (KERN_DEBUG "Couldn't register handler for accelerometer IRQ\n"); -    } - -    /* Should check the return value ... but if it fails, what do we do? */ -     -    return 0; -} - -static int __init omap3_wake_init (void) { -  pidfile = debugfs_create_file("wake_signal_pid", 0200, NULL, NULL, &h1_fops); -  acc_wake.user_pid = 0; /* No user thread yet */ - -  snprintf(acc_wake.lock_name, sizeof(acc_wake.lock_name), -           "Accelerometer"); -  wake_lock_init(&acc_wake.lock, WAKE_LOCK_SUSPEND, -                 acc_wake.lock_name); -  return 0; -} - - -#endif /* ONLY_KEEPING_THIS_STUFF_FOR_NOSTALGIC_REASONS */ -  /***************************************************************************   * omap_uart data  @@ -1042,21 +367,6 @@ static struct omap_uart_port_info omap_uart_ports[] = {  /*************************************************************************** - * DEVICE TREE STUFF - *  - * Trying to include some DT stuff with our board file. Not sure how this  - * will work out... - */ - -static struct of_device_id omap_dt_match_table[] __initdata = { -	{ .compatible = "olio,omap3-h1", }, -	{ .compatible = "simple-bus", }, -	{ .compatible = "ti,omap-infra", }, -	{ } -}; - - -/***************************************************************************   * omap3_h1_i2c_init - init the i2c buses    *   */ @@ -1075,12 +385,9 @@ static int __init omap3_h1_i2c_init(void)      acc_irq = gpio_to_irq(MPUIRQ_GPIO); -#ifdef CONFIG_MACH_OMAP3_H1_DVT2 +#if defined (CONFIG_MACH_OMAP3_H1_DVT2) || defined (CONFIG_MACH_OMAP3_H1_PV)  	omap3h1_i2c2_board_info[2].irq = gpio_to_irq(ATMEL_MXT_GPIO);      omap3h1_i2c2_board_info[0].irq = acc_irq; - -    ((struct tps65910_board *) (omap3h1_i2c1_board_info[0].platform_data))->irq =  -     gpio_to_irq (TPS_SYS_NIRQ);  #else  	omap3h1_i2c1_board_info[3].irq = gpio_to_irq(ATMEL_MXT_GPIO);      omap3h1_i2c1_board_info[1].irq = acc_irq; @@ -1090,8 +397,8 @@ static int __init omap3_h1_i2c_init(void)      /* Register buses */ -	omap_register_i2c_bus(1, 400, omap3h1_i2c1_board_info, ARRAY_SIZE(omap3h1_i2c1_board_info)); -#ifdef CONFIG_MACH_OMAP3_H1_DVT2 +	// omap_register_i2c_bus(1, 400, omap3h1_i2c1_board_info, ARRAY_SIZE(omap3h1_i2c1_board_info)); +#if defined (CONFIG_MACH_OMAP3_H1_DVT2) || defined (CONFIG_MACH_OMAP3_H1_PV)  	omap_register_i2c_bus(2, 400, omap3h1_i2c2_board_info, ARRAY_SIZE(omap3h1_i2c2_board_info));  #else  	omap_register_i2c_bus(2, 400, NULL, 0); @@ -1106,84 +413,11 @@ static int __init omap3_h1_i2c_init(void)  static struct platform_device *omap3h1_devices[] __initdata = { -		&omap3h1_vbat,          &bcm20702_bluetooth_device,          &nop_phy_device,  		&omap3h1_dmic_codec,  }; - -#ifdef CONFIG_OMAP_MUX -static struct omap_board_mux board_mux[] __initdata = { - -#if defined(CONFIG_MACH_OMAP3_H1_DVT1) || defined(CONFIG_MACH_OMAP3_H1_DVT2) -	OMAP3_MUX(CAM_HS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), -#else -	OMAP3_MUX(HSUSB0_DIR, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), -#endif -	OMAP3_MUX(DSS_PCLK, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_HSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_VSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA0, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA1, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA2, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA3, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA4, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA5, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA8, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA9, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA10, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA11, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA12, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA13, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA14, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA15, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA16, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(DSS_DATA17, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), - -	OMAP3_MUX(MCSPI1_CLK, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(MCSPI1_SIMO, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), -	OMAP3_MUX(MCSPI1_SOMI, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP), -	OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), - -	/* TOUCH_RESET */ - -	OMAP3_MUX(CAM_D6, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP), - -#if defined(CONFIG_MACH_OMAP3_H1_DVT1) || defined(CONFIG_MACH_OMAP3_H1_DVT2) -    /* USB pin settings (mUSB) */ - -    OMAP3_MUX(HSUSB0_CLK,   (OMAP_MUX_MODE0 | OMAP_PIN_INPUT)), -    OMAP3_MUX(HSUSB0_DATA0, (OMAP_MUX_MODE0 | OMAP_PIN_INPUT)), -    OMAP3_MUX(HSUSB0_DATA1, (OMAP_MUX_MODE0 | OMAP_PIN_INPUT)), -    OMAP3_MUX(HSUSB0_DATA2, (OMAP_MUX_MODE0 | OMAP_PIN_INPUT)), -    OMAP3_MUX(HSUSB0_DATA3, (OMAP_MUX_MODE0 | OMAP_PIN_INPUT)), -    OMAP3_MUX(HSUSB0_DATA4, (OMAP_MUX_MODE0 | OMAP_PIN_INPUT)), -    OMAP3_MUX(HSUSB0_DATA5, (OMAP_MUX_MODE0 | OMAP_PIN_INPUT)), -    OMAP3_MUX(HSUSB0_DATA6, (OMAP_MUX_MODE0 | OMAP_PIN_INPUT)), -    OMAP3_MUX(HSUSB0_DATA7, (OMAP_MUX_MODE0 | OMAP_PIN_INPUT)), -    OMAP3_MUX(HSUSB0_DIR,   (OMAP_MUX_MODE0 | OMAP_PIN_INPUT)), -    OMAP3_MUX(HSUSB0_NXT,   (OMAP_MUX_MODE0 | OMAP_PIN_INPUT)), -    OMAP3_MUX(HSUSB0_STP,   (OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT)), -#endif /* CONFIG_MACH_OMAP3_H1_DVT */ - -    /* accelerometer */ -      -    OMAP3_MUX(JTAG_EMU1, (OMAP_MUX_MODE4 | OMAP_PIN_INPUT  -                          | OMAP_PIN_OFF_WAKEUPENABLE)), -     -    /* USB on */ -     -    OMAP3_MUX(ETK_D7, (OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT)), - -    OMAP3_MUX(SYS_NIRQ, (OMAP_MUX_MODE0 | OMAP_PIN_INPUT)), - -	{ .reg_offset = OMAP_MUX_TERMINATOR }, -}; -#endif -  static void __init omap3_h1_init(void)  {      /* Read what we can from the device tree */ @@ -1195,14 +429,8 @@ static void __init omap3_h1_init(void)                      NAND_BUSWIDTH_16, NULL);  	omap_sdrc_init(mt29c8g96_sdrc_params, mt29c8g96_sdrc_params); - -    /* This is done in our device tree file now */ -    /* omap3_mux_init(board_mux, OMAP_PACKAGE_CBP); */ - -	omap3_h1_i2c_init(); - -    /* Set up the voltage domains */ -    omap3_voltdm_init(); +	 +    omap3_h1_i2c_init();  	platform_add_devices(omap3h1_devices, ARRAY_SIZE(omap3h1_devices)); @@ -1215,21 +443,6 @@ static void __init omap3_h1_init(void)  	usb_bind_phy("musb-hdrc.0.auto", 0, "nop_usb_xceiv"); /* "tusb-usb-h1" */  	usb_musb_init(&musb_board_data); - -#ifdef ONLY_KEEPING_THIS_STUFF_FOR_NOSTALGIC_REASONS - -    /* For handling interrupts from the accelerometer */ - -    previous = jiffies; -      -    /* Init the code that handles wake ups */ -  -    omap3_wake_init(); - -    omap3_acc_irq_init(omap3h1_i2c2_board_info[0].irq, (void *) &omap3h1_devices); - -#endif /* ONLY_KEEPING_THIS_STUFF_FOR_NOSTALGIC_REASONS */ -  }  static const char *omap3_h1_boards_compat[] __initdata = { diff --git a/arch/arm/mach-omap2/opp.c b/arch/arm/mach-omap2/opp.c index 7149f838be4..82fd8c72f75 100644 --- a/arch/arm/mach-omap2/opp.c +++ b/arch/arm/mach-omap2/opp.c @@ -41,10 +41,8 @@ int __init omap_init_opp_table(struct omap_opp_def *opp_def,  {  	int i, r; -    /* OLIO HACK  	if (of_have_populated_dt())  		return -EINVAL; -     */  	if (!opp_def || !opp_def_size) {  		pr_err("%s: invalid params!\n", __func__); diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index b2dc18a6b82..b06b22c3f64 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c @@ -276,8 +276,6 @@ static inline void omap_init_cpufreq(void)  		devinfo.name = "omap-cpufreq";  	else  		devinfo.name = "cpufreq-cpu0"; - -    devinfo.name = "omap-cpufreq"; /* OLIO HACK */  	platform_device_register_full(&devinfo);  } @@ -311,6 +309,13 @@ int __init omap2_common_pm_late_init(void)  		/* Smartreflex device init */  		omap_devinit_smartreflex(); +	} else { +		struct device_node *np; +		np = of_find_node_by_name(NULL, "omap_pimic"); +		if (np) { +			of_platform_populate(np, NULL, NULL, NULL); +			of_node_put(np); +		}  	}  	/* cpufreq dummy device instantiation */ diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index bdb2388ef4c..ebe383ded55 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -281,6 +281,86 @@ static int omap34xx_do_sram_idle(unsigned long save_state)  	return 0;  } +static u32 wkup_debug_get_reg(phys_addr_t reg) +{ +	u32 val; +	char *baseptr = ioremap(reg, 4); + +	val = *(u32 *)baseptr; +	iounmap(baseptr); + +	return val; +} + +struct wkup_debug_t { +	char name[20]; +	u32 reg; +}; + +struct wkup_debug_t wkup_debug_map[] = { +	{ +		.reg = 0x4831001C, +		.name = "GPIO_IRQENABLE1", +	}, +	{ +		.reg = 0x48310020, +		.name = "GPIO_WAKEUPENABLE", +	}, +	{ +		.reg = 0x48310010, +		.name = "GPIO_SYSCONFIG", +	}, +	{ +		.reg = 0x48310064, +		.name = "GPIO_SETIRQENABLE1", +	}, +	{ +		.reg = 0x48310084, +		.name = "GPIO_SETWKUENA", +	}, +	{ +		.reg = 0x48310048, +		.name = "GPIO_RISINGDETECT", +	}, +	{ +		.reg = 0x4831004C, +		.name = "GPIO_FALLINGDETECT", +	}, +	{ +		.reg = 0x4830681C, +		.name = "PRM_IRQENABLE_MPU", +	}, +	{ +		.reg = 0x483069C8, +		.name = "PM_WKDEP_MPU", +	}, +	{ +		.reg = 0x48306CA4, +		.name = "PM_MPUGRPSEL_WKUP", +	}, +	{ +		.reg = 0x48306CA0, +		.name = "PM_WKEN_WKUP", +	}, +	{ +		.reg = 0x48306CB0, +		.name = "PM_WKST_WKUP", +	}, +}; + +static void wkup_debug_print_regs(void) +{ +	int i; +	u32 val; +	struct wkup_debug_t *p = wkup_debug_map; + +	for (i = 0; i < ARRAY_SIZE(wkup_debug_map); i++) { +		val = wkup_debug_get_reg(p->reg); +		trace_printk("%s, 0x%x, val: 0x%x\n", p->name, p->reg, val); +		p++; +	} +} +  void omap_sram_idle(bool in_suspend)  {  	/* Variable to tell what needs to be saved and restored @@ -360,8 +440,10 @@ void omap_sram_idle(bool in_suspend)  	    core_next_state == PWRDM_POWER_OFF)  		sdrc_pwr = sdrc_read_reg(SDRC_POWER); -	if (suspend_debug) +	if (suspend_debug) {  		pm_dbg_regs_save(1); +		wkup_debug_print_regs(); +	}  	/*  	 * omap3_arm_context is the location where some ARM context  |