Re: [PATCH v3] Add new `export-symbols` node
Herve Codina <[email protected]>
| Newsgroups | org.kernel.vger.devicetree-spec,org.kernel.vger.linux-devicetree |
|---|---|
| Organization | Bootlin |
| Message-ID | <[email protected]> |
Hi Ayush, David, On Sat, 12 Apr 2025 00:19:16 +0530 Ayush Singh <[email protected]> wrote: > On 4/11/25 23:09, Andrew Davis wrote: > > > On 4/11/25 3:00 AM, Ayush Singh wrote: > >> `export-symbols` is designed to be a local replacement of global > >> `__symbols__` allowing nodes to define aliases to nodes in a tree, which > >> will take precedence over the aliases defined in the global > >> `__symbols__`. > >> > >> Having a way to allow node local aliases helps in usecases such as > >> connectors and addon-boards, by allowing decoupling of > >> overlays/devicetree nodes of addon-board from the base connector. > >> > >> Reviewed-by: Herve Codina <[email protected]> > >> Reviewed-by: Luca Ceresoli <[email protected]> > >> Signed-off-by: Ayush Singh <[email protected]> > >> --- > >> This patch series follows the initial RFC [9] sent a few weeks ago. I > >> will be reiterating the RFC here for anyone who might be seeing this the > >> first time, since there was not much feedback in that thread. > >> > > > > I think this is a useful tool in the effort to build a complete > > addon-board > > solution. But I'm still missing how it all fits together, do you have > > a real > > working overlay making use of this somewhere I could take a look at? > > Maybe > > an overlay for one of the addon-boards you list below (one of the > > BeagleCapes > > for instance). > > We (me and Luca) have a working device-tree and overlay. Our base device tree is the following (simplified but relevant part for this topic are available): / { ... addon_connector0: addon-connector0 { compatible = "gehc,sunhv1-addon-connector"; /* * addon-connector node is a nexus node * - 2 interupt lines are wired to the connector * - 1 gpio line is wired to the connector * - 1 PWM is wired to the connector */ #interrupt-cells = <2>; #address-cells = <0>; interrupt-map = <0 IRQ_TYPE_LEVEL_LOW &gpio4 1 IRQ_TYPE_LEVEL_LOW>, <0 IRQ_TYPE_EDGE_FALLING &gpio4 1 IRQ_TYPE_EDGE_FALLING>, <1 IRQ_TYPE_LEVEL_LOW &i2c3_mux 1 1 IRQ_TYPE_LEVEL_LOW>, <1 IRQ_TYPE_EDGE_FALLING &i2c3_mux 1 1 IRQ_TYPE_EDGE_FALLING>; #gpio-cells = <2>; gpio-map-mask = <0xf 0x0>; gpio-map-pass-thru = <0x0 0xf>; gpio-map = <0 0 &gpio4 1 0>; #pwm-cells = <3>; pwm-map-mask = <0xffffffff 0 0>; pwm-map-pass-thru = <0 0xffffffff 0xffffffff>; pwm-map = <0 0 0 &pwm1 0 57000 0>; devices { /* * 'no bus' devices such as fixed-regulators or * fixed-clocks will be added in this node by the * overlay. */ #address-cells = <0>; #size-cells = <0>; }; /* * This is the i2c bus wired at the connector. It is * handled by the i2c5 adapter available in the SoC. * The overlay will add devices in this node. Those * devices are devices available on the addon-board and * connected to this i2c bus */ i2c-addon { i2c-parent = <&i2c5>; #address-cells = <1>; #size-cells = <0>; }; export-symbols { /* * The 'addon_connector' symbol can be used from the * overlay to reference this connector */ addon_connector = <&addon_connector0>; }; }; }; Then following overlay is applied at the addon-connector0 node and described the addon board connected to the connector: / { fragment@0 { target-path = ""; __overlay__ { devices { reg_addon_3v3: regulator-addon-3v3 { compatible = "regulator-fixed"; regulator-name = "3V3_ADDON"; regulator-min-microvolt = <15000000>; regulator-max-microvolt = <15000000>; regulator-always-on; }; reg_addon_12v0: regulator-addon-12v0 { compatible = "regulator-fixed"; regulator-name = "12V0_ADDON"; vin-supply = <®_addon_3v3>; regulator-min-microvolt = <12000000>; regulator-max-microvolt = <12000000>; gpios = <&tca6424_addon 12 GPIO_ACTIVE_HIGH>; enable-active-high; }; /* * This backligh is a PWM driven backlight. * It uses the PWM #0 available at the connector */ backlight_addon: backlight-addon { compatible = "pwm-backlight"; power-supply = <®_addon_12v0>; pwms = <&addon_connector 0 57000 0>; brightness-levels = <0 255>; num-interpolated-steps = <255>; default-brightness-level = <255>; }; }; i2c-addon { #address-cells = <1>; #size-cells = <0>; /* * This IO expander uses the interrupt #0 * available at the connector. * It is a device connected to the i2c-addon bus * available at the connector. */ tca6424_addon: gpio@23 { compatible = "ti,tca6424"; status = "okay"; reg = <0x23>; gpio-controller; #gpio-cells = <2>; interrupt-parent = <&addon_connector>; interrupts = <0 IRQ_TYPE_EDGE_FALLING>; interrupt-controller; #interrupt-cells = <2>; vcc-supply = <®_addon_3v3>; }; }; }; }; }; Best regards, Hervé