|
@@ -526,6 +526,46 @@ static struct platform_device ams_delta_serio_device = {
|
|
|
.id = PLATFORM_DEVID_NONE,
|
|
|
};
|
|
|
|
|
|
+static struct regulator_consumer_supply keybrd_pwr_consumers[] = {
|
|
|
+ /*
|
|
|
+ * Initialize supply .dev_name with NULL. It will be replaced
|
|
|
+ * with serio dev_name() as soon as the serio device is registered.
|
|
|
+ */
|
|
|
+ REGULATOR_SUPPLY("vcc", NULL),
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data keybrd_pwr_initdata = {
|
|
|
+ .constraints = {
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(keybrd_pwr_consumers),
|
|
|
+ .consumer_supplies = keybrd_pwr_consumers,
|
|
|
+};
|
|
|
+
|
|
|
+static struct fixed_voltage_config keybrd_pwr_config = {
|
|
|
+ .supply_name = "keybrd_pwr",
|
|
|
+ .microvolts = 5000000,
|
|
|
+ .gpio = AMS_DELTA_GPIO_PIN_KEYBRD_PWR,
|
|
|
+ .enable_high = 1,
|
|
|
+ .init_data = &keybrd_pwr_initdata,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device keybrd_pwr_device = {
|
|
|
+ .name = "reg-fixed-voltage",
|
|
|
+ .id = PLATFORM_DEVID_AUTO,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &keybrd_pwr_config,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct gpiod_lookup_table keybrd_pwr_gpio_table = {
|
|
|
+ .table = {
|
|
|
+ GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_KEYBRD_PWR, NULL,
|
|
|
+ GPIO_ACTIVE_HIGH),
|
|
|
+ { },
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
static struct platform_device *ams_delta_devices[] __initdata = {
|
|
|
&latch1_gpio_device,
|
|
|
&latch2_gpio_device,
|
|
@@ -543,6 +583,7 @@ static struct platform_device *late_devices[] __initdata = {
|
|
|
|
|
|
static struct gpiod_lookup_table *ams_delta_gpio_tables[] __initdata = {
|
|
|
&ams_delta_audio_gpio_table,
|
|
|
+ &keybrd_pwr_gpio_table,
|
|
|
};
|
|
|
|
|
|
static struct gpiod_lookup_table *late_gpio_tables[] __initdata = {
|
|
@@ -598,12 +639,30 @@ static void __init ams_delta_init(void)
|
|
|
platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices));
|
|
|
|
|
|
/*
|
|
|
- * As soon as devices have been registered, assign their dev_names
|
|
|
- * to respective GPIO lookup tables before they are added.
|
|
|
+ * As soon as regulator consumers have been registered, assign their
|
|
|
+ * dev_names to consumer supply entries of respective regulators.
|
|
|
+ */
|
|
|
+ keybrd_pwr_consumers[0].dev_name =
|
|
|
+ dev_name(&ams_delta_serio_device.dev);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Once consumer supply entries are populated with dev_names,
|
|
|
+ * register regulator devices. At this stage only the keyboard
|
|
|
+ * power regulator has its consumer supply table fully populated.
|
|
|
+ */
|
|
|
+ platform_device_register(&keybrd_pwr_device);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * As soon as GPIO consumers have been registered, assign
|
|
|
+ * their dev_names to respective GPIO lookup tables.
|
|
|
*/
|
|
|
ams_delta_audio_gpio_table.dev_id =
|
|
|
dev_name(&ams_delta_audio_device.dev);
|
|
|
+ keybrd_pwr_gpio_table.dev_id = dev_name(&keybrd_pwr_device.dev);
|
|
|
|
|
|
+ /*
|
|
|
+ * Once GPIO lookup tables are populated with dev_names, register them.
|
|
|
+ */
|
|
|
gpiod_add_lookup_tables(ams_delta_gpio_tables,
|
|
|
ARRAY_SIZE(ams_delta_gpio_tables));
|
|
|
|