Ensure we are powering on and off the FETs controlling the backlight and
the LCD VDD.
Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
BUG=chrome-os-partner:18122
TEST=on Spring, use "powerd_suspend" to suspend the machine, and check
the state of the TPS65090 FETs by using the "pmu" on the EC command
line.
Change-Id: I3a0d03fdac18b4d13de2d33de6ba2e0429dd0daf
Reviewed-on: https://gerrit.chromium.org/gerrit/44599
Reviewed-by: Todd Broch <tbroch@chromium.org>
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Commit-Queue: Vincent Palatin <vpalatin@chromium.org>
Tested-by: Vincent Palatin <vpalatin@chromium.org>
struct i2c_client *client;
struct regulator *v12;
struct i2c_client *client;
struct regulator *v12;
+ struct regulator *bck_fet;
+ struct regulator *lcd_fet;
struct backlight_device *bl;
int gpio_slp_n;
struct backlight_device *bl;
int gpio_slp_n;
if (bridge->v12)
regulator_enable(bridge->v12);
if (bridge->v12)
regulator_enable(bridge->v12);
+ if (bridge->bck_fet)
+ regulator_enable(bridge->bck_fet);
+ if (bridge->lcd_fet)
+ regulator_enable(bridge->lcd_fet);
if (gpio_is_valid(bridge->gpio_slp_n))
gpio_set_value(bridge->gpio_slp_n, 1);
if (gpio_is_valid(bridge->gpio_slp_n))
gpio_set_value(bridge->gpio_slp_n, 1);
if (gpio_is_valid(bridge->gpio_slp_n))
gpio_set_value(bridge->gpio_slp_n, 0);
if (gpio_is_valid(bridge->gpio_slp_n))
gpio_set_value(bridge->gpio_slp_n, 0);
+ if (bridge->lcd_fet)
+ regulator_disable(bridge->lcd_fet);
+ if (bridge->bck_fet)
+ regulator_disable(bridge->bck_fet);
if (bridge->v12)
regulator_disable(bridge->v12);
}
if (bridge->v12)
regulator_disable(bridge->v12);
}
drm_bridge_cleanup(dbridge);
if (bridge->bl)
backlight_device_unregister(bridge->bl);
drm_bridge_cleanup(dbridge);
if (bridge->bl)
backlight_device_unregister(bridge->bl);
+ if (bridge->lcd_fet)
+ regulator_put(bridge->lcd_fet);
+ if (bridge->bck_fet)
+ regulator_put(bridge->bck_fet);
if (bridge->v12)
regulator_put(bridge->v12);
if (gpio_is_valid(bridge->gpio_slp_n))
if (bridge->v12)
regulator_put(bridge->v12);
if (gpio_is_valid(bridge->gpio_slp_n))
DRM_ERROR("no 1.2v regulator found for PS8622\n");
bridge->v12 = NULL;
}
DRM_ERROR("no 1.2v regulator found for PS8622\n");
bridge->v12 = NULL;
}
+ bridge->bck_fet = regulator_get(&client->dev, "vcd_led");
+ if (IS_ERR(bridge->bck_fet)) {
+ DRM_ERROR("no regulator found for backlight FET\n");
+ bridge->bck_fet = NULL;
+ }
+ bridge->lcd_fet = regulator_get(&client->dev, "lcd_vdd");
+ if (IS_ERR(bridge->lcd_fet)) {
+ DRM_ERROR("no regulator found for LCD FET\n");
+ bridge->lcd_fet = NULL;
+ }
bridge->gpio_slp_n = of_get_named_gpio(node, "sleep-gpio", 0);
if (gpio_is_valid(bridge->gpio_slp_n)) {
bridge->gpio_slp_n = of_get_named_gpio(node, "sleep-gpio", 0);
if (gpio_is_valid(bridge->gpio_slp_n)) {
if (gpio_is_valid(bridge->gpio_slp_n))
gpio_free(bridge->gpio_slp_n);
err_reg:
if (gpio_is_valid(bridge->gpio_slp_n))
gpio_free(bridge->gpio_slp_n);
err_reg:
+ if (bridge->bck_fet)
+ regulator_put(bridge->bck_fet);
+ if (bridge->lcd_fet)
+ regulator_put(bridge->lcd_fet);
if (bridge->v12)
regulator_put(bridge->v12);
DRM_ERROR("device probe failed : %d\n", ret);
if (bridge->v12)
regulator_put(bridge->v12);
DRM_ERROR("device probe failed : %d\n", ret);