@@ -1331,6 +1331,15 @@ static struct device_node *parse_##fname(struct device_node *np, \
return parse_prop_cells(np, prop_name, index, name, cells); \
}
+#define DEFINE_SIMPLE_NEXUS_PROP(fname, name, stem) \
+static struct device_node *parse_##fname(struct device_node *np, \
+ const char *prop_name, int index) \
+{ \
+ if (strcmp(prop_name, name)) \
+ return NULL; \
+ return parse_nexus_prop(np, prop_name, index, stem); \
+}
+
/**
* parse_suffix_prop_cells - Suffix property parsing function for suppliers
*
@@ -1426,7 +1435,6 @@ DEFINE_SIMPLE_PROP(extcon, "extcon", NULL)
DEFINE_SIMPLE_PROP(nvmem_cells, "nvmem-cells", "#nvmem-cell-cells")
DEFINE_SIMPLE_PROP(phys, "phys", "#phy-cells")
DEFINE_SIMPLE_PROP(wakeup_parent, "wakeup-parent", NULL)
-DEFINE_SIMPLE_PROP(pwms, "pwms", "#pwm-cells")
DEFINE_SIMPLE_PROP(resets, "resets", "#reset-cells")
DEFINE_SIMPLE_PROP(leds, "leds", NULL)
DEFINE_SIMPLE_PROP(backlight, "backlight", NULL)
@@ -1438,6 +1446,7 @@ DEFINE_SIMPLE_PROP(pses, "pses", "#pse-cells")
DEFINE_SIMPLE_PROP(power_supplies, "power-supplies", NULL)
DEFINE_SIMPLE_PROP(mmc_pwrseq, "mmc-pwrseq", NULL)
DEFINE_SUFFIX_PROP(regulators, "-supply", NULL)
+DEFINE_SIMPLE_NEXUS_PROP(pwms, "pwms", "pwm")
DEFINE_SUFFIX_NEXUS_PROP(gpio, "-gpio", "gpio")
static struct device_node *parse_pinctrl_n(struct device_node *np,
@@ -85,11 +85,19 @@ gpio_provider: gpio-controller {
#gpio-cells = <2>;
};
+ pwm_provider: pwm-controller {
+ #pwm-cells = <3>;
+ };
+
test_nexus: nexus {
#gpio-cells = <2>;
+ #pwm-cells = <3>;
gpio-map = <0 0 &gpio_provider 1 0>;
gpio-map-mask = <0xffffffff 0>;
gpio-map-pass-thru = <0 0xffffffff>;
+ pwm-map = <0 0 0 &pwm_provider 1 0 0>;
+ pwm-map-mask = <0xffffffff 0 0>;
+ pwm-map-pass-thru = <0 0xffffffff 0xffffffff>;
};
gpio-compat-consumer {
@@ -111,6 +119,14 @@ gpio-direct-consumer {
gpio-singular-consumer {
test-gpio = <&test_nexus 0 0>;
};
+
+ pwm-consumer {
+ pwms = <&test_nexus 0 1000 0>;
+ };
+
+ pwm-direct-consumer {
+ pwms = <&pwm_provider 1 1000 0>;
+ };
};
};
};
@@ -759,6 +759,7 @@ static void __init of_unittest_fw_devlink_supplier(struct device_node *tests,
static void __init of_unittest_fw_devlink(void)
{
const char *gpio_supplier = "gpio-controller";
+ const char *pwm_supplier = "pwm-controller";
struct device_node *tests;
tests = of_find_node_by_path("/testcase-data/phandle-tests/fw-devlink-tests");
@@ -773,6 +774,9 @@ static void __init of_unittest_fw_devlink(void)
of_unittest_fw_devlink_supplier(tests, "gpio-direct-consumer", gpio_supplier);
of_unittest_fw_devlink_supplier(tests, "gpio-singular-consumer", gpio_supplier);
+ of_unittest_fw_devlink_supplier(tests, "pwm-consumer", pwm_supplier);
+ of_unittest_fw_devlink_supplier(tests, "pwm-direct-consumer", pwm_supplier);
+
of_node_put(tests);
}