diff options
| author | Tom Rini <[email protected]> | 2020-10-24 10:49:28 -0400 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2020-10-24 10:49:28 -0400 |
| commit | c99e87f82803500f9811b1e98926d9d25df35b38 (patch) | |
| tree | 9ed4491e17a925e5d7a50ff21af8c33080f32ef1 /drivers | |
| parent | 001ab99325bf82cf3284771d1312585570569740 (diff) | |
| parent | 16cc5ad0b439b1444af8134019d9d49d776fd67c (diff) | |
Merge branch '2020-10-23-misc-changes'
Highlights:
- Fix a problem with the bootm overlap tests
- Remove duplicated code in fatwrite
- Cleanup our current "misc" command code and add a new one for misc
class devices.
- Various GPIO fixes
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/i2c/i2c-gpio.c | 10 | ||||
| -rw-r--r-- | drivers/phy/nop-phy.c | 35 | ||||
| -rw-r--r-- | drivers/power/regulator/gpio-regulator.c | 23 |
3 files changed, 52 insertions, 16 deletions
diff --git a/drivers/i2c/i2c-gpio.c b/drivers/i2c/i2c-gpio.c index cfdeadc752c..381938c956f 100644 --- a/drivers/i2c/i2c-gpio.c +++ b/drivers/i2c/i2c-gpio.c @@ -18,8 +18,6 @@ #define I2C_ACK 0 #define I2C_NOACK 1 -DECLARE_GLOBAL_DATA_PTR; - enum { PIN_SDA = 0, PIN_SCL, @@ -334,8 +332,6 @@ static int i2c_gpio_drv_probe(struct udevice *dev) static int i2c_gpio_ofdata_to_platdata(struct udevice *dev) { struct i2c_gpio_bus *bus = dev_get_priv(dev); - const void *blob = gd->fdt_blob; - int node = dev_of_offset(dev); int ret; ret = gpio_request_list_by_name(dev, "gpios", bus->gpios, @@ -343,12 +339,12 @@ static int i2c_gpio_ofdata_to_platdata(struct udevice *dev) if (ret < 0) goto error; - bus->udelay = fdtdec_get_int(blob, node, "i2c-gpio,delay-us", - DEFAULT_UDELAY); + bus->udelay = dev_read_u32_default(dev, "i2c-gpio,delay-us", + DEFAULT_UDELAY); bus->get_sda = i2c_gpio_sda_get; bus->set_sda = i2c_gpio_sda_set; - if (fdtdec_get_bool(blob, node, "i2c-gpio,scl-output-only")) + if (dev_read_bool(dev, "i2c-gpio,scl-output-only")) bus->set_scl = i2c_gpio_scl_set_output_only; else bus->set_scl = i2c_gpio_scl_set; diff --git a/drivers/phy/nop-phy.c b/drivers/phy/nop-phy.c index a5eed20f3f9..ba71785fe42 100644 --- a/drivers/phy/nop-phy.c +++ b/drivers/phy/nop-phy.c @@ -4,17 +4,50 @@ * Written by Jean-Jacques Hiblot <[email protected]> */ +#include <clk.h> #include <common.h> #include <dm.h> #include <dm/device.h> +#include <dm/device_compat.h> #include <generic-phy.h> +struct nop_phy_priv { + struct clk_bulk bulk; +}; + +static int nop_phy_init(struct phy *phy) +{ + struct nop_phy_priv *priv = dev_get_priv(phy->dev); + + if (CONFIG_IS_ENABLED(CLK)) + return clk_enable_bulk(&priv->bulk); + + return 0; +} + +static int nop_phy_probe(struct udevice *dev) +{ + struct nop_phy_priv *priv = dev_get_priv(dev); + int ret; + + if (CONFIG_IS_ENABLED(CLK)) { + ret = clk_get_bulk(dev, &priv->bulk); + if (ret < 0) { + dev_err(dev, "Failed to get clk: %d\n", ret); + return ret; + } + } + + return 0; +} + static const struct udevice_id nop_phy_ids[] = { { .compatible = "nop-phy" }, { } }; static struct phy_ops nop_phy_ops = { + .init = nop_phy_init, }; U_BOOT_DRIVER(nop_phy) = { @@ -22,4 +55,6 @@ U_BOOT_DRIVER(nop_phy) = { .id = UCLASS_PHY, .of_match = nop_phy_ids, .ops = &nop_phy_ops, + .probe = nop_phy_probe, + .priv_auto_alloc_size = sizeof(struct nop_phy_priv), }; diff --git a/drivers/power/regulator/gpio-regulator.c b/drivers/power/regulator/gpio-regulator.c index 947f812d099..28c9e222e2b 100644 --- a/drivers/power/regulator/gpio-regulator.c +++ b/drivers/power/regulator/gpio-regulator.c @@ -18,8 +18,6 @@ #define GPIO_REGULATOR_MAX_STATES 2 -DECLARE_GLOBAL_DATA_PTR; - struct gpio_regulator_platdata { struct regulator_common_platdata common; struct gpio_desc gpio; /* GPIO for regulator voltage control */ @@ -32,10 +30,8 @@ static int gpio_regulator_ofdata_to_platdata(struct udevice *dev) struct dm_regulator_uclass_platdata *uc_pdata; struct gpio_regulator_platdata *dev_pdata; struct gpio_desc *gpio; - const void *blob = gd->fdt_blob; - int node = dev_of_offset(dev); int ret, count, i, j; - u32 states_array[8]; + u32 states_array[GPIO_REGULATOR_MAX_STATES * 2]; dev_pdata = dev_get_platdata(dev); uc_pdata = dev_get_uclass_platdata(dev); @@ -57,11 +53,20 @@ static int gpio_regulator_ofdata_to_platdata(struct udevice *dev) if (ret) debug("regulator gpio - not found! Error: %d", ret); - count = fdtdec_get_int_array_count(blob, node, "states", - states_array, 8); + ret = dev_read_size(dev, "states"); + if (ret < 0) + return ret; - if (!count) - return -EINVAL; + count = ret / sizeof(states_array[0]); + if (count > ARRAY_SIZE(states_array)) { + debug("regulator gpio - to many states (%d > %d)", + count / 2, GPIO_REGULATOR_MAX_STATES); + count = ARRAY_SIZE(states_array); + } + + ret = dev_read_u32_array(dev, "states", states_array, count); + if (ret < 0) + return ret; for (i = 0, j = 0; i < count; i += 2) { dev_pdata->voltages[j] = states_array[i]; |
