Vocore2 pwm sysfs

velo
 
Posts: 5
Joined: Mon Jan 30, 2017 8:02 am

Vocore2 pwm sysfs

Mon Jan 30, 2017 8:17 am

Hi!
I'm trying to access the pwm sysfs on my vocore2. In the default image, there is no pwm sysfs interface. However, I managed to configure support for it through kernel config and building my own image:
Code: Select all
diff --git a/target/linux/ramips/mt7628/config-3.18 b/target/linux/ramips/mt7628/config-3.18
index aca70ca..ef52bac 100644
--- a/target/linux/ramips/mt7628/config-3.18
+++ b/target/linux/ramips/mt7628/config-3.18
@@ -159,6 +159,15 @@ CONFIG_PHYLIB=y
 CONFIG_PHY_RALINK_USB=y
 CONFIG_PINCTRL=y
 CONFIG_PINCTRL_RT2880=y
+#### velo
+## taken from target/linux/ramips/mt7688/config-3.18
+
+CONFIG_PWM=y
+# CONFIG_PWM_FSL_FTM is not set
+CONFIG_PWM_MEDIATEK=y
+CONFIG_PWM_SYSFS=y
+
+#### konrad
 # CONFIG_PINCTRL_SINGLE is not set
 # CONFIG_PREEMPT_RCU is not set
 CONFIG_RALINK=y


with this image, there is a pwm node in /sys/class/pwm. But it is missing all interfaces.
Code: Select all
root@vocore2:/sys/class/pwm# ls -alh
drwxr-xr-x    2 root     root           0 Jan  1  1970 .
drwxr-xr-x   27 root     root           0 Jan  1  1970 ..

I have no clue what to do from here. But I have a couple of observations, that may give hints:
1) with my custom image a lot of GPIOs are exported by default:
Code: Select all
root@vocore2:/sys/class/gpio# ls
export      gpio20      gpio37      gpio39      gpio41      gpiochip0   gpiochip64
gpio19      gpio21      gpio38      gpio40      gpio42      gpiochip32  unexport


2) in dmesg there is a lot of chatter from pinctrl:

Code: Select all
[    0.070000] pinctrl core: initialized pinctrl subsystem
[    0.080000] NET: Registered protocol family 16
[    0.090000] rt2880-pinmux pinctrl: try to register 47 pins ...
[    0.090000] pinctrl core: registered pin 0 (io0) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 1 (io1) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 2 (io2) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 3 (io3) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 4 (io4) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 5 (io5) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 6 (io6) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 7 (io7) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 8 (io8) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 9 (io9) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 10 (io10) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 11 (io11) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 12 (io12) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 13 (io13) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 14 (io14) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 15 (io15) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 16 (io16) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 17 (io17) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 18 (io18) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 19 (io19) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 20 (io20) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 21 (io21) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 22 (io22) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 23 (io23) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 24 (io24) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 25 (io25) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 26 (io26) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 27 (io27) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 28 (io28) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 29 (io29) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 30 (io30) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 31 (io31) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 32 (io32) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 33 (io33) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 34 (io34) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 35 (io35) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 36 (io36) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 37 (io37) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 38 (io38) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 39 (io39) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 40 (io40) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 41 (io41) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 42 (io42) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 43 (io43) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 44 (io44) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 45 (io45) on rt2880-pinmux
[    0.090000] pinctrl core: registered pin 46 (io46) on rt2880-pinmux
[    0.090000] pinctrl core: add 14 pinmux maps
[    0.090000] rt2880-pinmux pinctrl: found group selector 14 for gpio
[    0.090000] rt2880-pinmux pinctrl: found group selector 4 for i2c
[    0.090000] rt2880-pinmux pinctrl: found group selector 11 for i2s
[    0.090000] rt2880-pinmux pinctrl: found group selector 0 for pwm1
[    0.090000] rt2880-pinmux pinctrl: found group selector 2 for uart2
[    0.090000] rt2880-pinmux pinctrl: found group selector 9 for sdmode
[    0.090000] rt2880-pinmux pinctrl: found group selector 7 for wdt
[    0.090000] rt2880-pinmux pinctrl: found group selector 5 for refclk
[    0.090000] rt2880-pinmux pinctrl: found group selector 27 for agpio
[    0.090000] rt2880-pinmux pinctrl: found group selector 20 for p4led_an
[    0.090000] rt2880-pinmux pinctrl: found group selector 19 for p3led_an
[    0.090000] rt2880-pinmux pinctrl: found group selector 18 for p2led_an
[    0.090000] rt2880-pinmux pinctrl: found group selector 17 for p1led_an
[    0.090000] rt2880-pinmux pinctrl: found group selector 16 for p0led_an
[    0.090000] rt2880-pinmux pinctrl: request pin 11 (io11) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 4 (io4) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 5 (io5) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 0 (io0) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 1 (io1) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 2 (io2) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 3 (io3) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 19 (io19) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 20 (io20) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 21 (io21) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 22 (io22) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 23 (io23) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 24 (io24) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 25 (io25) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 26 (io26) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 27 (io27) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 28 (io28) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 29 (io29) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 38 (io38) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 36 (io36) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 39 (io39) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 40 (io40) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 41 (io41) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 42 (io42) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: request pin 43 (io43) for pinctrl
[    0.090000] rt2880-pinmux pinctrl: failed to lookup the sleep state
[    0.100000] mt7621_gpio 10000600.gpio: registering 32 gpios
[    0.110000] mt7621_gpio 10000600.gpio: registering 32 gpios
[    0.110000] mt7621_gpio 10000600.gpio: registering 32 gpios


I have a hunch that I may be only missing an adjustment to pinctrl, but I have no idea what to do or what I may be missing. Any hints?

Any help is greatly appreciated!
Thanks, velo

Vonger
 
Posts: 896
Joined: Sun Oct 19, 2014 6:00 am

Re: Vocore2 pwm sysfs

Mon Jan 30, 2017 12:06 pm

I guess you need to change dts(which is compiled when making firmware), update dts will enable pwm and disable part of the gpio.
Or another way, you can directly hack the register...

velo
 
Posts: 5
Joined: Mon Jan 30, 2017 8:02 am

Re: Vocore2 pwm sysfs

Mon Jan 30, 2017 12:52 pm

Thanks for your response, Vonger!
you need to change dts(which is compiled when making firmware), update dts will enable pwm and disable part of the gpio.


can you be a little more specific? What kind of changes would be necessary/what pin addresses need to be registered?

I found the following files

Code: Select all
openwrt-chaoscalmer/target/linux/ramips/dts/MT7628.dts
openwrt-chaoscalmer/target/linux/ramips/dts/mt7628an.dtsi

plus a bunch of DTS files in
Code: Select all
openwrt-chaoscalmer/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/linux-3.18.36/arch/mips/boot/dts

but those seem to be for other chips.

If you can give me some more pointers that would be wonderful!

Vonger
 
Posts: 896
Joined: Sun Oct 19, 2014 6:00 am

Re: Vocore2 pwm sysfs

Wed Feb 01, 2017 2:56 pm

Emm, this is a hard way:
First, download the openwrt source from vocore.io/v2.
Second, find VoCore2.dts in source, try to understand the pinctrl section, map gpio to pwm and also enable pwm section in dts.(in this cruel linux world you have to understand how pinctrl work, better check its source. ^_^ )
Third, enable pwm driver in menuconfig.

After that, I think you are able to patch VOCORE2.dts and setup the pwm driver and you will be a good linux hacker. :D

Return to VoCore2/Lite/Ultimate

Who is online

Users browsing this forum: No registered users and 45 guests