backlight/ld9040.c: regulator control in the lcd driver
From: Linus Walleij <hidden>
Date: 2011-12-02 10:05:43
Also in:
linux-fbdev
On Fri, Dec 2, 2011 at 9:57 AM, Kyungmin Park [off-list ref] wrote:
quoted
[leedonghwa][Me]quoted
quoted
+ ? ? ? ? lcd->reg_vdd3 = regulator_get(lcd->dev, "vdd"); + ? ? ? ? if (IS_ERR(lcd->reg_vdd3)) { + ? ? ? ? ? ? ? ? ? dev_info(lcd->dev, "no %s regulator found\n", "vdd"); + ? ? ? ? ? ? ? ? ? lcd->reg_vdd3 = NULL; + ? ? ? ? } + + ? ? ? ? lcd->reg_vci = regulator_get(lcd->dev, "vci"); + ? ? ? ? if (IS_ERR(lcd->reg_vci)) { + ? ? ? ? ? ? ? ? ? dev_info(lcd->dev, "no %s regulator found\n", "vci"); + ? ? ? ? ? ? ? ? ? lcd->reg_vci = NULL; + ? ? ? ? }As explained in earlier discussion with Mark regarding the SMSC911x driver regulator, treat these as errors and do not fail "gracefully" like this. Reference: http://marc.info/?l=linux-netdev&m=131914562120725&w=2As mentioned at commit message, the lcd regulator is optional part and refer the mmc codes ? ? ? ?host->vmmc = regulator_get(mmc_dev(mmc), "vmmc"); ? ? ? ?if (IS_ERR(host->vmmc)) { ? ? ? ? ? ? ? ?pr_info("%s: no vmmc regulator found\n", mmc_hostname(mmc)); ? ? ? ? ? ? ? ?host->vmmc = NULL; ? ? ? ?} else { ? ? ? ? ? ? ? ?regulator_enable(host->vmmc); ? ? ? ?} Previous time, these codes are located at board file, but more boards are used, it has same codes for all boards. so move it to drivers.
I know. This was brought up in the aforementioned discussion, but the above is also wrong, simply. See: http://marc.info/?l=linux-netdev&m=131914562120667&w=2 http://marc.info/?l=linux-netdev&m=131914562120690&w=2 http://marc.info/?l=linux-netdev&m=131914562120725&w=2 http://marc.info/?l=linux-netdev&m=131963332527416&w=2
In our case, it has the regulator but some boards don't. Umm then how to handle the regulator gracefully?
Mark suggest using a fixed-voltage regulator for boards where the power is always on. The voltage level itself is optional. See: http://marc.info/?l=linux-netdev&m=131963332527416&w=2 Other approaches is to use dummy regulators, or not call regulator_has_full_constraints(), which means the regulator core will provide dummy regulators anyways. See: http://marc.info/?l=linux-netdev&m=131973043527112&w=2 http://marc.info/?l=linux-netdev&m=131975178703166&w=2 Whole thread of discussion: http://marc.info/?l=linux-netdev&w=2&r=1&s=smsc911x&q=b Yours, Linus Walleij