Devicetree fixes for 6.11, part 1

- Treewide conversion of of_property_for_each_u32() to drop internal
   arguments making struct property opaque
 
 - Add binding for Amlogic A4 SoC watchdog
 
 - Fix constraints for AD7192 'single-channel' property
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEktVUI4SxYhzZyEuo+vtdtY28YcMFAmaj8ncACgkQ+vtdtY28
 YcMwZRAAh618Xfw+J8pxv62PMw11r0hgMNYoHPYDMt47D7g9Wwa71xdR6OpfIpf+
 EyHUXrnXJT6f5sm8mVe9Gsni0MZfgdkwchxlCQej0rJKchdLdAFNXbg4GbhF+0Ht
 tA3Y6bPB9FYKHExd87flnt4AO3ypF+1ihjSAAoy4EyEZUfyKgQVPyebDGwlPYlkH
 dmhF+q9d94LVw3lj/C7htWGELProogsU3i498ey7m/w8jwiJav2DVJ0cRuld/aPG
 7VwGQhJzdndlH1MPcl9slzIPadUrZ0S3/7V4c9cC0E22XpHJzp4RSdGmzsXJ7adp
 Q+OlQYiyZLLhEA/alVO/j5SJtfxt+T6+lrpbbu1wcJMFoukXusvL+0KbxxbExEn0
 /3MrZuxEq3F+jcKtMR/1PFcO7o1uEzzyTZcdufV3siABjZqmG4AFzBhHWP4Xh2Uw
 6hs7R/Ktf2lmacCK9fawfJF6Qq4RtFIakUuI6S3Q3oHHTRw6kr1Lsw+Wko/K20mO
 BEdfhocxEk5vf/kGxcBfM+GTybhagbBh0GxYB/Lm8vATfLHzhunipbc0ZwozDfPu
 IWiY+Nv+hGeGhfvSfNFUcsknF+QwtSjGis7hQjHkJc/siahaXJVAaf+tvtL1xm/p
 0CGPIJFZgzkcbjCT3iPVaJjfyRlMe9l7HJ6XiBSrMpiFpZPTgT8=
 =Nn/d
 -----END PGP SIGNATURE-----

Merge tag 'devicetree-fixes-for-6.11-1' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux

Pull more devicetree updates from Rob Herring:
 "Most of this is a treewide change to of_property_for_each_u32() which
  was small enough to do in one go before rc1 and avoids the need to
  create of_property_for_each_u32_some_new_name().

   - Treewide conversion of of_property_for_each_u32() to drop internal
     arguments making struct property opaque

   - Add binding for Amlogic A4 SoC watchdog

   - Fix constraints for AD7192 'single-channel' property"

* tag 'devicetree-fixes-for-6.11-1' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux:
  dt-bindings: iio: adc: ad7192: Fix 'single-channel' constraints
  of: remove internal arguments from of_property_for_each_u32()
  dt-bindings: watchdog: add support for Amlogic A4 SoCs
This commit is contained in:
Linus Torvalds 2024-07-27 12:46:16 -07:00
commit bf80f1391a
24 changed files with 64 additions and 96 deletions

View File

@ -120,9 +120,8 @@ patternProperties:
description: description:
Positive input can be connected to pins AIN1 to AIN16 by choosing the Positive input can be connected to pins AIN1 to AIN16 by choosing the
appropriate value from 1 to 16. Negative input is connected to AINCOM. appropriate value from 1 to 16. Negative input is connected to AINCOM.
items: minimum: 1
minimum: 1 maximum: 16
maximum: 16
oneOf: oneOf:
- required: - required:

View File

@ -21,6 +21,7 @@ properties:
- amlogic,t7-wdt - amlogic,t7-wdt
- items: - items:
- enum: - enum:
- amlogic,a4-wdt
- amlogic,c3-wdt - amlogic,c3-wdt
- amlogic,s4-wdt - amlogic,s4-wdt
- const: amlogic,t7-wdt - const: amlogic,t7-wdt

View File

@ -559,9 +559,7 @@ bool __init xive_native_init(void)
struct device_node *np; struct device_node *np;
struct resource r; struct resource r;
void __iomem *tima; void __iomem *tima;
struct property *prop;
u8 max_prio = 7; u8 max_prio = 7;
const __be32 *p;
u32 val, cpu; u32 val, cpu;
s64 rc; s64 rc;
@ -592,7 +590,7 @@ bool __init xive_native_init(void)
max_prio = val - 1; max_prio = val - 1;
/* Iterate the EQ sizes and pick one */ /* Iterate the EQ sizes and pick one */
of_property_for_each_u32(np, "ibm,xive-eq-sizes", prop, p, val) { of_property_for_each_u32(np, "ibm,xive-eq-sizes", val) {
xive_queue_shift = val; xive_queue_shift = val;
if (val == PAGE_SHIFT) if (val == PAGE_SHIFT)
break; break;

View File

@ -814,7 +814,6 @@ bool __init xive_spapr_init(void)
struct device_node *np; struct device_node *np;
struct resource r; struct resource r;
void __iomem *tima; void __iomem *tima;
struct property *prop;
u8 max_prio; u8 max_prio;
u32 val; u32 val;
u32 len; u32 len;
@ -866,7 +865,7 @@ bool __init xive_spapr_init(void)
} }
/* Iterate the EQ sizes and pick one */ /* Iterate the EQ sizes and pick one */
of_property_for_each_u32(np, "ibm,xive-eq-sizes", prop, reg, val) { of_property_for_each_u32(np, "ibm,xive-eq-sizes", val) {
xive_queue_shift = val; xive_queue_shift = val;
if (val == PAGE_SHIFT) if (val == PAGE_SHIFT)
break; break;

View File

@ -2291,11 +2291,9 @@ static int sysc_init_idlemode(struct sysc *ddata, u8 *idlemodes,
const char *name) const char *name)
{ {
struct device_node *np = ddata->dev->of_node; struct device_node *np = ddata->dev->of_node;
struct property *prop;
const __be32 *p;
u32 val; u32 val;
of_property_for_each_u32(np, name, prop, p, val) { of_property_for_each_u32(np, name, val) {
if (val >= SYSC_NR_IDLEMODES) { if (val >= SYSC_NR_IDLEMODES) {
dev_err(ddata->dev, "invalid idlemode: %i\n", val); dev_err(ddata->dev, "invalid idlemode: %i\n", val);
return -EINVAL; return -EINVAL;

View File

@ -81,13 +81,11 @@ err:
static int __set_clk_rates(struct device_node *node, bool clk_supplier) static int __set_clk_rates(struct device_node *node, bool clk_supplier)
{ {
struct of_phandle_args clkspec; struct of_phandle_args clkspec;
struct property *prop;
const __be32 *cur;
int rc, index = 0; int rc, index = 0;
struct clk *clk; struct clk *clk;
u32 rate; u32 rate;
of_property_for_each_u32(node, "assigned-clock-rates", prop, cur, rate) { of_property_for_each_u32(node, "assigned-clock-rates", rate) {
if (rate) { if (rate) {
rc = of_parse_phandle_with_args(node, "assigned-clocks", rc = of_parse_phandle_with_args(node, "assigned-clocks",
"#clock-cells", index, &clkspec); "#clock-cells", index, &clkspec);

View File

@ -1175,8 +1175,8 @@ static int si5351_dt_parse(struct i2c_client *client,
{ {
struct device_node *child, *np = client->dev.of_node; struct device_node *child, *np = client->dev.of_node;
struct si5351_platform_data *pdata; struct si5351_platform_data *pdata;
struct property *prop; u32 array[4];
const __be32 *p; int sz, i;
int num = 0; int num = 0;
u32 val; u32 val;
@ -1191,20 +1191,24 @@ static int si5351_dt_parse(struct i2c_client *client,
* property silabs,pll-source : <num src>, [<..>] * property silabs,pll-source : <num src>, [<..>]
* allow to selectively set pll source * allow to selectively set pll source
*/ */
of_property_for_each_u32(np, "silabs,pll-source", prop, p, num) { sz = of_property_read_variable_u32_array(np, "silabs,pll-source", array, 2, 4);
sz = (sz == -EINVAL) ? 0 : sz; /* Missing property is OK */
if (sz < 0)
return dev_err_probe(&client->dev, sz, "invalid pll-source\n");
if (sz % 2)
return dev_err_probe(&client->dev, -EINVAL,
"missing pll-source for pll %d\n", array[sz - 1]);
for (i = 0; i < sz; i += 2) {
num = array[i];
val = array[i + 1];
if (num >= 2) { if (num >= 2) {
dev_err(&client->dev, dev_err(&client->dev,
"invalid pll %d on pll-source prop\n", num); "invalid pll %d on pll-source prop\n", num);
return -EINVAL; return -EINVAL;
} }
p = of_prop_next_u32(prop, p, &val);
if (!p) {
dev_err(&client->dev,
"missing pll-source for pll %d\n", num);
return -EINVAL;
}
switch (val) { switch (val) {
case 0: case 0:
pdata->pll_src[num] = SI5351_PLL_SRC_XTAL; pdata->pll_src[num] = SI5351_PLL_SRC_XTAL;
@ -1232,19 +1236,24 @@ static int si5351_dt_parse(struct i2c_client *client,
pdata->pll_reset[0] = true; pdata->pll_reset[0] = true;
pdata->pll_reset[1] = true; pdata->pll_reset[1] = true;
of_property_for_each_u32(np, "silabs,pll-reset-mode", prop, p, num) { sz = of_property_read_variable_u32_array(np, "silabs,pll-reset-mode", array, 2, 4);
sz = (sz == -EINVAL) ? 0 : sz; /* Missing property is OK */
if (sz < 0)
return dev_err_probe(&client->dev, sz, "invalid pll-reset-mode\n");
if (sz % 2)
return dev_err_probe(&client->dev, -EINVAL,
"missing pll-reset-mode for pll %d\n", array[sz - 1]);
for (i = 0; i < sz; i += 2) {
num = array[i];
val = array[i + 1];
if (num >= 2) { if (num >= 2) {
dev_err(&client->dev, dev_err(&client->dev,
"invalid pll %d on pll-reset-mode prop\n", num); "invalid pll %d on pll-reset-mode prop\n", num);
return -EINVAL; return -EINVAL;
} }
p = of_prop_next_u32(prop, p, &val);
if (!p) {
dev_err(&client->dev,
"missing pll-reset-mode for pll %d\n", num);
return -EINVAL;
}
switch (val) { switch (val) {
case 0: case 0:

View File

@ -5364,9 +5364,8 @@ EXPORT_SYMBOL_GPL(of_clk_get_parent_count);
const char *of_clk_get_parent_name(const struct device_node *np, int index) const char *of_clk_get_parent_name(const struct device_node *np, int index)
{ {
struct of_phandle_args clkspec; struct of_phandle_args clkspec;
struct property *prop;
const char *clk_name; const char *clk_name;
const __be32 *vp; bool found = false;
u32 pv; u32 pv;
int rc; int rc;
int count; int count;
@ -5383,15 +5382,16 @@ const char *of_clk_get_parent_name(const struct device_node *np, int index)
/* if there is an indices property, use it to transfer the index /* if there is an indices property, use it to transfer the index
* specified into an array offset for the clock-output-names property. * specified into an array offset for the clock-output-names property.
*/ */
of_property_for_each_u32(clkspec.np, "clock-indices", prop, vp, pv) { of_property_for_each_u32(clkspec.np, "clock-indices", pv) {
if (index == pv) { if (index == pv) {
index = count; index = count;
found = true;
break; break;
} }
count++; count++;
} }
/* We went off the end of 'clock-indices' without finding it */ /* We went off the end of 'clock-indices' without finding it */
if (prop && !vp) if (of_property_present(clkspec.np, "clock-indices") && !found)
return NULL; return NULL;
if (of_property_read_string_index(clkspec.np, "clock-output-names", if (of_property_read_string_index(clkspec.np, "clock-output-names",
@ -5504,14 +5504,12 @@ static int parent_ready(struct device_node *np)
int of_clk_detect_critical(struct device_node *np, int index, int of_clk_detect_critical(struct device_node *np, int index,
unsigned long *flags) unsigned long *flags)
{ {
struct property *prop;
const __be32 *cur;
uint32_t idx; uint32_t idx;
if (!np || !flags) if (!np || !flags)
return -EINVAL; return -EINVAL;
of_property_for_each_u32(np, "clock-critical", prop, cur, idx) of_property_for_each_u32(np, "clock-critical", idx)
if (index == idx) if (index == idx)
*flags |= CLK_IS_CRITICAL; *flags |= CLK_IS_CRITICAL;

View File

@ -227,11 +227,9 @@ EXPORT_SYMBOL_GPL(qcom_cc_register_sleep_clk);
static void qcom_cc_drop_protected(struct device *dev, struct qcom_cc *cc) static void qcom_cc_drop_protected(struct device *dev, struct qcom_cc *cc)
{ {
struct device_node *np = dev->of_node; struct device_node *np = dev->of_node;
struct property *prop;
const __be32 *p;
u32 i; u32 i;
of_property_for_each_u32(np, "protected-clocks", prop, p, i) { of_property_for_each_u32(np, "protected-clocks", i) {
if (i >= cc->num_rclks) if (i >= cc->num_rclks)
continue; continue;

View File

@ -21,11 +21,9 @@ static void __init sunxi_simple_gates_setup(struct device_node *node,
{ {
struct clk_onecell_data *clk_data; struct clk_onecell_data *clk_data;
const char *clk_parent, *clk_name; const char *clk_parent, *clk_name;
struct property *prop;
struct resource res; struct resource res;
void __iomem *clk_reg; void __iomem *clk_reg;
void __iomem *reg; void __iomem *reg;
const __be32 *p;
int number, i = 0, j; int number, i = 0, j;
u8 clk_bit; u8 clk_bit;
u32 index; u32 index;
@ -47,7 +45,7 @@ static void __init sunxi_simple_gates_setup(struct device_node *node,
if (!clk_data->clks) if (!clk_data->clks)
goto err_free_data; goto err_free_data;
of_property_for_each_u32(node, "clock-indices", prop, p, index) { of_property_for_each_u32(node, "clock-indices", index) {
of_property_read_string_index(node, "clock-output-names", of_property_read_string_index(node, "clock-output-names",
i, &clk_name); i, &clk_name);

View File

@ -24,11 +24,9 @@ static void __init sun8i_h3_bus_gates_init(struct device_node *node)
const char *parents[PARENT_MAX]; const char *parents[PARENT_MAX];
struct clk_onecell_data *clk_data; struct clk_onecell_data *clk_data;
const char *clk_name; const char *clk_name;
struct property *prop;
struct resource res; struct resource res;
void __iomem *clk_reg; void __iomem *clk_reg;
void __iomem *reg; void __iomem *reg;
const __be32 *p;
int number, i; int number, i;
u8 clk_bit; u8 clk_bit;
int index; int index;
@ -58,7 +56,7 @@ static void __init sun8i_h3_bus_gates_init(struct device_node *node)
goto err_free_data; goto err_free_data;
i = 0; i = 0;
of_property_for_each_u32(node, "clock-indices", prop, p, index) { of_property_for_each_u32(node, "clock-indices", index) {
of_property_read_string_index(node, "clock-output-names", of_property_read_string_index(node, "clock-output-names",
i, &clk_name); i, &clk_name);

View File

@ -418,8 +418,6 @@ void __init samsung_pwm_clocksource_init(void __iomem *base,
static int __init samsung_pwm_alloc(struct device_node *np, static int __init samsung_pwm_alloc(struct device_node *np,
const struct samsung_pwm_variant *variant) const struct samsung_pwm_variant *variant)
{ {
struct property *prop;
const __be32 *cur;
u32 val; u32 val;
int i, ret; int i, ret;
@ -427,7 +425,7 @@ static int __init samsung_pwm_alloc(struct device_node *np,
for (i = 0; i < SAMSUNG_PWM_NUM; ++i) for (i = 0; i < SAMSUNG_PWM_NUM; ++i)
pwm.irq[i] = irq_of_parse_and_map(np, i); pwm.irq[i] = irq_of_parse_and_map(np, i);
of_property_for_each_u32(np, "samsung,pwm-outputs", prop, cur, val) { of_property_for_each_u32(np, "samsung,pwm-outputs", val) {
if (val >= SAMSUNG_PWM_NUM) { if (val >= SAMSUNG_PWM_NUM) {
pr_warn("%s: invalid channel index in samsung,pwm-outputs property\n", __func__); pr_warn("%s: invalid channel index in samsung,pwm-outputs property\n", __func__);
continue; continue;

View File

@ -591,8 +591,6 @@ static int brcmstb_gpio_probe(struct platform_device *pdev)
void __iomem *reg_base; void __iomem *reg_base;
struct brcmstb_gpio_priv *priv; struct brcmstb_gpio_priv *priv;
struct resource *res; struct resource *res;
struct property *prop;
const __be32 *p;
u32 bank_width; u32 bank_width;
int num_banks = 0; int num_banks = 0;
int num_gpios = 0; int num_gpios = 0;
@ -636,8 +634,7 @@ static int brcmstb_gpio_probe(struct platform_device *pdev)
flags = BGPIOF_BIG_ENDIAN_BYTE_ORDER; flags = BGPIOF_BIG_ENDIAN_BYTE_ORDER;
#endif #endif
of_property_for_each_u32(np, "brcm,gpio-bank-widths", prop, p, of_property_for_each_u32(np, "brcm,gpio-bank-widths", bank_width) {
bank_width) {
struct brcmstb_gpio_bank *bank; struct brcmstb_gpio_bank *bank;
struct gpio_chip *gc; struct gpio_chip *gc;

View File

@ -564,13 +564,11 @@ static int tiadc_parse_dt(struct platform_device *pdev,
struct tiadc_device *adc_dev) struct tiadc_device *adc_dev)
{ {
struct device_node *node = pdev->dev.of_node; struct device_node *node = pdev->dev.of_node;
struct property *prop;
const __be32 *cur;
int channels = 0; int channels = 0;
u32 val; u32 val;
int i; int i;
of_property_for_each_u32(node, "ti,adc-channels", prop, cur, val) { of_property_for_each_u32(node, "ti,adc-channels", val) {
adc_dev->channel_line[channels] = val; adc_dev->channel_line[channels] = val;
/* Set Default values for optional DT parameters */ /* Set Default values for optional DT parameters */

View File

@ -111,8 +111,6 @@ static void __init aic_common_ext_irq_of_init(struct irq_domain *domain)
struct device_node *node = irq_domain_get_of_node(domain); struct device_node *node = irq_domain_get_of_node(domain);
struct irq_chip_generic *gc; struct irq_chip_generic *gc;
struct aic_chip_data *aic; struct aic_chip_data *aic;
struct property *prop;
const __be32 *p;
u32 hwirq; u32 hwirq;
gc = irq_get_domain_generic_chip(domain, 0); gc = irq_get_domain_generic_chip(domain, 0);
@ -120,7 +118,7 @@ static void __init aic_common_ext_irq_of_init(struct irq_domain *domain)
aic = gc->private; aic = gc->private;
aic->ext_irqs |= 1; aic->ext_irqs |= 1;
of_property_for_each_u32(node, "atmel,external-irqs", prop, p, hwirq) { of_property_for_each_u32(node, "atmel,external-irqs", hwirq) {
gc = irq_get_domain_generic_chip(domain, hwirq); gc = irq_get_domain_generic_chip(domain, hwirq);
if (!gc) { if (!gc) {
pr_warn("AIC: external irq %d >= %d skip it\n", pr_warn("AIC: external irq %d >= %d skip it\n",

View File

@ -190,13 +190,11 @@ static void __init pic32_ext_irq_of_init(struct irq_domain *domain)
{ {
struct device_node *node = irq_domain_get_of_node(domain); struct device_node *node = irq_domain_get_of_node(domain);
struct evic_chip_data *priv = domain->host_data; struct evic_chip_data *priv = domain->host_data;
struct property *prop;
const __le32 *p;
u32 hwirq; u32 hwirq;
int i = 0; int i = 0;
const char *pname = "microchip,external-irqs"; const char *pname = "microchip,external-irqs";
of_property_for_each_u32(node, pname, prop, p, hwirq) { of_property_for_each_u32(node, pname, hwirq) {
if (i >= ARRAY_SIZE(priv->ext_irqs)) { if (i >= ARRAY_SIZE(priv->ext_irqs)) {
pr_warn("More than %d external irq, skip rest\n", pr_warn("More than %d external irq, skip rest\n",
ARRAY_SIZE(priv->ext_irqs)); ARRAY_SIZE(priv->ext_irqs));

View File

@ -119,8 +119,6 @@ static int ti_tscadc_probe(struct platform_device *pdev)
struct clk *clk; struct clk *clk;
struct device_node *node; struct device_node *node;
struct mfd_cell *cell; struct mfd_cell *cell;
struct property *prop;
const __be32 *cur;
bool use_tsc = false, use_mag = false; bool use_tsc = false, use_mag = false;
u32 val; u32 val;
int err; int err;
@ -167,7 +165,7 @@ static int ti_tscadc_probe(struct platform_device *pdev)
} }
node = of_get_child_by_name(pdev->dev.of_node, "adc"); node = of_get_child_by_name(pdev->dev.of_node, "adc");
of_property_for_each_u32(node, "ti,adc-channels", prop, cur, val) { of_property_for_each_u32(node, "ti,adc-channels", val) {
adc_channels++; adc_channels++;
if (val > 7) { if (val > 7) {
dev_err(&pdev->dev, " PIN numbers are 0..7 (not %d)\n", dev_err(&pdev->dev, " PIN numbers are 0..7 (not %d)\n",

View File

@ -730,9 +730,7 @@ static int s32_pinctrl_parse_groups(struct device_node *np,
struct s32_pin_group *grp, struct s32_pin_group *grp,
struct s32_pinctrl_soc_info *info) struct s32_pinctrl_soc_info *info)
{ {
const __be32 *p;
struct device *dev; struct device *dev;
struct property *prop;
unsigned int *pins, *sss; unsigned int *pins, *sss;
int i, npins; int i, npins;
u32 pinmux; u32 pinmux;
@ -763,7 +761,7 @@ static int s32_pinctrl_parse_groups(struct device_node *np,
return -ENOMEM; return -ENOMEM;
i = 0; i = 0;
of_property_for_each_u32(np, "pinmux", prop, p, pinmux) { of_property_for_each_u32(np, "pinmux", pinmux) {
pins[i] = get_pin_no(pinmux); pins[i] = get_pin_no(pinmux);
sss[i] = get_pin_func(pinmux); sss[i] = get_pin_func(pinmux);

View File

@ -763,8 +763,6 @@ static int k210_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
unsigned int *reserved_maps, unsigned int *reserved_maps,
unsigned int *num_maps) unsigned int *num_maps)
{ {
struct property *prop;
const __be32 *p;
int ret, pinmux_groups; int ret, pinmux_groups;
u32 pinmux_group; u32 pinmux_group;
unsigned long *configs = NULL; unsigned long *configs = NULL;
@ -797,7 +795,7 @@ static int k210_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
if (ret < 0) if (ret < 0)
goto exit; goto exit;
of_property_for_each_u32(np, "pinmux", prop, p, pinmux_group) { of_property_for_each_u32(np, "pinmux", pinmux_group) {
const char *group_name, *func_name; const char *group_name, *func_name;
u32 pin = FIELD_GET(K210_PG_PIN, pinmux_group); u32 pin = FIELD_GET(K210_PG_PIN, pinmux_group);
u32 func = FIELD_GET(K210_PG_FUNC, pinmux_group); u32 func = FIELD_GET(K210_PG_FUNC, pinmux_group);

View File

@ -510,8 +510,6 @@ static int pwm_samsung_parse_dt(struct pwm_chip *chip)
struct samsung_pwm_chip *our_chip = to_samsung_pwm_chip(chip); struct samsung_pwm_chip *our_chip = to_samsung_pwm_chip(chip);
struct device_node *np = pwmchip_parent(chip)->of_node; struct device_node *np = pwmchip_parent(chip)->of_node;
const struct of_device_id *match; const struct of_device_id *match;
struct property *prop;
const __be32 *cur;
u32 val; u32 val;
match = of_match_node(samsung_pwm_matches, np); match = of_match_node(samsung_pwm_matches, np);
@ -520,7 +518,7 @@ static int pwm_samsung_parse_dt(struct pwm_chip *chip)
memcpy(&our_chip->variant, match->data, sizeof(our_chip->variant)); memcpy(&our_chip->variant, match->data, sizeof(our_chip->variant));
of_property_for_each_u32(np, "samsung,pwm-outputs", prop, cur, val) { of_property_for_each_u32(np, "samsung,pwm-outputs", val) {
if (val >= SAMSUNG_PWM_NUM) { if (val >= SAMSUNG_PWM_NUM) {
dev_err(pwmchip_parent(chip), dev_err(pwmchip_parent(chip),
"%s: invalid channel index in samsung,pwm-outputs property\n", "%s: invalid channel index in samsung,pwm-outputs property\n",

View File

@ -770,8 +770,6 @@ static void sysrq_of_get_keyreset_config(void)
{ {
u32 key; u32 key;
struct device_node *np; struct device_node *np;
struct property *prop;
const __be32 *p;
np = of_find_node_by_path("/chosen/linux,sysrq-reset-seq"); np = of_find_node_by_path("/chosen/linux,sysrq-reset-seq");
if (!np) { if (!np) {
@ -782,7 +780,7 @@ static void sysrq_of_get_keyreset_config(void)
/* Reset in case a __weak definition was present */ /* Reset in case a __weak definition was present */
sysrq_reset_seq_len = 0; sysrq_reset_seq_len = 0;
of_property_for_each_u32(np, "keyset", prop, p, key) { of_property_for_each_u32(np, "keyset", key) {
if (key == KEY_RESERVED || key > KEY_MAX || if (key == KEY_RESERVED || key > KEY_MAX ||
sysrq_reset_seq_len == SYSRQ_KEY_RESET_MAX) sysrq_reset_seq_len == SYSRQ_KEY_RESET_MAX)
break; break;

View File

@ -382,11 +382,9 @@ static void usb251xb_get_ports_field(struct usb251xb *hub,
bool ds_only, u8 *fld) bool ds_only, u8 *fld)
{ {
struct device *dev = hub->dev; struct device *dev = hub->dev;
struct property *prop;
const __be32 *p;
u32 port; u32 port;
of_property_for_each_u32(dev->of_node, prop_name, prop, p, port) { of_property_for_each_u32(dev->of_node, prop_name, port) {
if ((port >= ds_only ? 1 : 0) && (port <= port_cnt)) if ((port >= ds_only ? 1 : 0) && (port <= port_cnt))
*fld |= BIT(port); *fld |= BIT(port);
else else

View File

@ -430,11 +430,9 @@ extern int of_detach_node(struct device_node *);
#define of_match_ptr(_ptr) (_ptr) #define of_match_ptr(_ptr) (_ptr)
/* /*
* struct property *prop;
* const __be32 *p;
* u32 u; * u32 u;
* *
* of_property_for_each_u32(np, "propname", prop, p, u) * of_property_for_each_u32(np, "propname", u)
* printk("U32 value: %x\n", u); * printk("U32 value: %x\n", u);
*/ */
const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur,
@ -1431,11 +1429,12 @@ static inline int of_property_read_s32(const struct device_node *np,
err == 0; \ err == 0; \
err = of_phandle_iterator_next(it)) err = of_phandle_iterator_next(it))
#define of_property_for_each_u32(np, propname, prop, p, u) \ #define of_property_for_each_u32(np, propname, u) \
for (prop = of_find_property(np, propname, NULL), \ for (struct {struct property *prop; const __be32 *item; } _it = \
p = of_prop_next_u32(prop, NULL, &u); \ {of_find_property(np, propname, NULL), \
p; \ of_prop_next_u32(_it.prop, NULL, &u)}; \
p = of_prop_next_u32(prop, p, &u)) _it.item; \
_it.item = of_prop_next_u32(_it.prop, _it.item, &u))
#define of_property_for_each_string(np, propname, prop, s) \ #define of_property_for_each_string(np, propname, prop, s) \
for (prop = of_find_property(np, propname, NULL), \ for (prop = of_find_property(np, propname, NULL), \

View File

@ -2786,15 +2786,13 @@ int arizona_of_get_audio_pdata(struct arizona *arizona)
{ {
struct arizona_pdata *pdata = &arizona->pdata; struct arizona_pdata *pdata = &arizona->pdata;
struct device_node *np = arizona->dev->of_node; struct device_node *np = arizona->dev->of_node;
struct property *prop;
const __be32 *cur;
u32 val; u32 val;
u32 pdm_val[ARIZONA_MAX_PDM_SPK]; u32 pdm_val[ARIZONA_MAX_PDM_SPK];
int ret; int ret;
int count = 0; int count = 0;
count = 0; count = 0;
of_property_for_each_u32(np, "wlf,inmode", prop, cur, val) { of_property_for_each_u32(np, "wlf,inmode", val) {
if (count == ARRAY_SIZE(pdata->inmode)) if (count == ARRAY_SIZE(pdata->inmode))
break; break;
@ -2803,7 +2801,7 @@ int arizona_of_get_audio_pdata(struct arizona *arizona)
} }
count = 0; count = 0;
of_property_for_each_u32(np, "wlf,dmic-ref", prop, cur, val) { of_property_for_each_u32(np, "wlf,dmic-ref", val) {
if (count == ARRAY_SIZE(pdata->dmic_ref)) if (count == ARRAY_SIZE(pdata->dmic_ref))
break; break;
@ -2812,7 +2810,7 @@ int arizona_of_get_audio_pdata(struct arizona *arizona)
} }
count = 0; count = 0;
of_property_for_each_u32(np, "wlf,out-mono", prop, cur, val) { of_property_for_each_u32(np, "wlf,out-mono", val) {
if (count == ARRAY_SIZE(pdata->out_mono)) if (count == ARRAY_SIZE(pdata->out_mono))
break; break;
@ -2821,7 +2819,7 @@ int arizona_of_get_audio_pdata(struct arizona *arizona)
} }
count = 0; count = 0;
of_property_for_each_u32(np, "wlf,max-channels-clocked", prop, cur, val) { of_property_for_each_u32(np, "wlf,max-channels-clocked", val) {
if (count == ARRAY_SIZE(pdata->max_channels_clocked)) if (count == ARRAY_SIZE(pdata->max_channels_clocked))
break; break;
@ -2830,7 +2828,7 @@ int arizona_of_get_audio_pdata(struct arizona *arizona)
} }
count = 0; count = 0;
of_property_for_each_u32(np, "wlf,out-volume-limit", prop, cur, val) { of_property_for_each_u32(np, "wlf,out-volume-limit", val) {
if (count == ARRAY_SIZE(pdata->out_vol_limit)) if (count == ARRAY_SIZE(pdata->out_vol_limit))
break; break;