Hi Bas,

I know it has been a while since you've talked about this topic, but I came 
across it while searching for a solution for my problem. (beaglebone black 
with Debian wheezy kernel 3.8.13)

I also want to drive some pins with the "heartbeat" and "cpu0" events, and 
I succeeded, however, by changing the Data Tree Blob ( 
/boot/uboot/dts/am335x-boneblack.dtb ); converting to .dts, modifying and 
converting back to .dtb. But I wanted to create a Overlay that so I could 
load and unload at my taste.

I've created the overlay as follows in file 
/lib/firmware/activityOnPins-00A0.dts:

/dts-v1/;
/plugin/;

/ {
        compatible = "ti,beaglebone", "ti,beaglebone-black";

        /* identification */
        part-number = "activityOnPins";
        version = "V1";

        exclusive-use =
                "P9.14",
                "P9.16",
                "ehrpwm1a",
                "ehrpwm1b";

        fragment@0 {
                target = <&am33xx_pinmux>;
                __overlay__ {
                        act_leds: pin_mux_act_leds_pins {
                                pinctrl-single,pins = <
                                        0x48 0x7
                                        0x4c 0x7
                                >;
                        };
                };
        };

        fragment@1 {
                target = <&ocp>;
                __overlay__ {
                        activity_leds {
                                compatible = "gpio-leds";
                                pinctrl-names = "default";
                                pinctrl-0 = <&act_leds>;

                                actled_heartbeat {
                                        label = 
"beaglebone:actled:heartbeat";
                                        gpios = <&gpio1 18 0>;
                                        linux,default-trigger = "heartbeat";
                                        default-state = "off";
                                };

                                actled_cpu {
                                        label = "beaglebone:actled:cpu";
                                        gpios = <&gpio1 19 0>;
                                        linux,default-trigger = "cpu0";
                                        default-state = "off";
                                };
                        };
                };
        };
};

I compile it with:
root@beaglebone:/lib/firmware# dtc -O dtb -o activityOnPins-00A0.dtbo -b 0 
-@ activityOnPins-00A0.dts

without any problems; then I load it with:
root@beaglebone:/lib/firmware# echo activityOnPins > 
/sys/devices/bone_capemgr.9/slots

And I can confirm it it appears on the slot. However checking dmesg I get:
[  165.034412] bone-capemgr bone_capemgr.9: part_number 'activityOnPins', 
version 'N/A'
[  165.034605] bone-capemgr bone_capemgr.9: slot #8: generic override
[  165.034657] bone-capemgr bone_capemgr.9: bone: Using override eeprom 
data at slot 8
[  165.034709] bone-capemgr bone_capemgr.9: slot #8: 'Override Board 
Name,00A0,Override Manuf,activityOnPins'
[  165.037350] bone-capemgr bone_capemgr.9: slot #8: Requesting part 
number/version based 'activityOnPins-00A0.dtbo
[  165.037418] bone-capemgr bone_capemgr.9: slot #8: Requesting firmware 
'activityOnPins-00A0.dtbo' for board-name 'Override Board Name', version 
'00A0'
[  165.043234] bone-capemgr bone_capemgr.9: slot #8: dtbo 
'activityOnPins-00A0.dtbo' loaded; converting to live tree
[  165.044391] bone-capemgr bone_capemgr.9: slot #8: #2 overlays
[  165.053464] of_get_named_gpio_flags exited with status 19
[  165.053518] of_get_named_gpio_flags exited with status 18
[  165.053561] of_get_named_gpio_flags exited with status 19
[  165.054122] of_get_named_gpio_flags exited with status 18
[  165.059018] bone-capemgr bone_capemgr.9: slot #8: Applied #2 overlays.

is it normal? I also see that the directories 
/sys/class/leds/beaglebone:actled:cpu and 
/sys/class/leds/beaglebone:actled:heartbeat are created.

*My problem is*, after loading the dtbo the pins don't start indicating the 
CPU's and Heartbeat, and I can't even control them manually by writing to 
"brightness" file. Do you know where I'm doing the mistake?

I hope you can help me. Thank you a lot.

cumps,
JCBastos Portela

On Tuesday, July 9, 2013 at 9:31:03 PM UTC+3, Bas Laarhoven wrote:
>
> On 9-7-2013 19:13, mron wrote:
>
> Bas, 
> Thanks for your reply. I looked at your overlay file. It looks like you 
> know what you're doing so I'd like to ask some questions to clear up some 
> confusion I have about device trees. If you can refer me to reference 
> pages, I'd appreciate it.
>
>
> It's been a while... I used Google and the kernel source code.
>
>
> 1) I see where you assign a "heartbeat" to a pin under the /*--- LED 
> ----*/ section. Why do you have 2 fragments, one targeting <&am33xx_pinmux> 
> and another targeting  <&ocp> ?  I see this pattern frequently in overlay 
> examples. In other cases you target the resource directly i.e. 
> fragment@22 {
> target = <&pruss>
> What determines how you target?
>
>
> In fact, there are 3 sections for each pin:
>
> The first in the exclusive-use section. Here you specify the used 
> resource. It seems like a bunch of text strings that can be used to 
> determine conflicts,
> I'm not sure if these are really used and whether conflicts are detected. 
> AFAIK you can put any string in the list.
>
> Second, you must let the pinmux driver know how to configure the pin. By 
> this you're connecting the (hardware) pin to an internal device.
>
> Third, you'll often want to initialize a some driver to connect to a 
> single or set of pins.
>
> How does this map to your LED:
>
> You'll find the LED output in the exclusive-use section:
>
>                 "P8.25";        /* gpio1.0        LED     */
>
> The pinmux setting is done in fragment51 of the example:
>
>                 pinctrl-single,pins = <
>                     0x000 0x07    /* P8-25 GPIO1_0    gpmc_ad0 
> .gpio1[0]     */
>
> And finally, the pin is being driven by the gpio-leds driver as determined 
> in fragment52:
>
>             bebopr_leds {
>                 compatible = "gpio-leds";
>                 pinctrl-names = "default";
>                 pinctrl-0 = <&bebopr_led_pins>;
>
>                 status_led {
>                     label = "bebopr:status_led";
>                     gpios = <&gpio2 0 0>;
>                     linux,default-trigger = "heartbeat";
>                     default-state = "off";
>                 };
>
> If you look in /sys/devices/ocp.2, you'll find a 'bebopr_leds.*' directory 
> with a
> 'leds/bebopr:status_led/trigger' file. If you cat that file, you'll see 
> the options
> that can be set (like some other - software -  level of pinmuxing). 
> "heatbeat"
> is one of these options. IIRC you can also configure the output as normal 
> gpio.
>
> With the PWM signals I'm playing some tricks so that I can configure the 
> pinmux
> setting from userspace without having to load a new overlay. Each of the 3 
> PWM
> outputs has 3 (one has only 2 but I'll ignore that for now) possible 
> sources: Each
> pin can either been driven by a GPIO pin driver, a PRUSS output or a 
> EHRPWM output.
>
> The pinmux-helper driver exports these to the sysfs and initializes the 
> pinmux to the
> 'default' setting. But you can override this by writing a value string 
> ("default", "pruss"
> or "gpio") to the 'state' file in the corresponding pinmux directory (e.g. 
> bebopr_pwm_J2_pinmux.11).
>
>
> 2) It looks like you use many drivers in your system. Which ones are 
> openly available? Where do you find docs for them? For instance, "
> bone-pinmux-helper" and "gpio-leds" are used in many examples, but I 
> can't find their usage described.
>
>
> I've found little documentation on all these features. As you'll often 
> hear with Linux:
> the source is the documentation. Search, discover and try !
>
> 3)  is "exclusive-use =" a standard tag in device trees? I assume it 
> prevents other process from accessing the peripherals you allocate.
>
>
> Good question, hopefully I did answer part of it above.
>
>
>> Questions:
>> 1) Why don't the nodes "pinmux_userled_pins" and "led0" have "compatible" 
>> labels, I read all nodes should.
>>
>
> Where do you get this from?
>
> 2) How are the addresses for gpio-leds linked to the pinmux addresses
>>
>
> The silly thing with this naming or addressing scheme is that there's no 
> architect
> who controls the namespaces. For each pin there are too many ways to name
> that pin. I spend quite some time looking up names/ pins/ offsets. With 
> the overlays.
> If you look in the above example: gpio1[0], gpio32, P8.25, gpmc_ad0, 
> '&gpio2 0' (yes,
> this is not a typo!) and offset 0x000 are all referring to the same 
> resouce. And this
> list is not even complete.
>
> 3) Is there a driver called "gpio-leds"? Does it have documentation?
>>
>
> See above
>
> I hope to have answered some of your questions. I'm not a DT expert, just 
> someone
> who doesn't give up easily :-)
>
> -- Bas
>
> -- 
> For more options, visit http://beagleboard.org/discuss
> --- 
> You received this message because you are subscribed to the Google Groups 
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] <javascript:>.
> For more options, visit https://groups.google.com/groups/opt_out.
>  
>  
>
>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to