How to pass parameter to w1_therm kernel module enabled by DT overlay?

507 views
Skip to first unread message

Loren Amelang

unread,
Nov 23, 2015, 12:17:55 AM11/23/15
to BeagleBoard
I have a BBB with Ubuntu 14.04 (Linux arm 3.8.13-bone56) and their repo version of owserver (2.8p15-1ubuntu4 armhf). With a strong enough passive pullup (<1K) I can read temperatures from my DS18B20, via w1 and BBB GPIO 45. (If the pullup is not strong enough, the temperatures from the 1-Wire sensors read high!)

I've verified the GPIO is working, it can source plenty of current for the 1-Wire bus, and does push the bus within 0.07 V of the 3.3 supply during 1-Wire setup, but apparently w1 is not turning on the strong pullup in actual operation.

It looks to me like it should:
root@arm:/sys/devices/w1_bus_master1# cat w1_master_pullup
1

The system knows I'm parasitic.
OWFS on localhost:4304
power   NO (0)

I tried forcing the pullup on via sysfs, and the value '2' read back, but the actual pullup was still not enabled:
ubuntu@arm:/sys/devices/w1_bus_master1$ cat w1_master_pullup
2

The author of the w1 kernel modules says sysfs probably won't work, I need to pass two parameters to two of his modules:
      w1-gpio pullup=1
      w1-therm strong_pullup=2

The modules are compiled into my kernel:
CONFIG_W1_MASTER_GPIO=y
CONFIG_W1_SLAVE_THERM=y

ubuntu@arm:~$ cat /lib/modules/$(uname -r)/modules.builtin
...
kernel/drivers/w1/wire.ko
kernel/drivers/w1/masters/w1-gpio.ko
kernel/drivers/w1/slaves/w1_therm.ko
kernel/drivers/w1/slaves/w1_smem.ko

So I can't use modprobe to reload them with different parameters.

I see people saying to specify boot parameters on the kernel command line through GRUB - but the BBB does not use GRUB. Maybe they need to be passed to U-Boot?

But my w1 is not enabled at boot time - it is manually started as a BBB device tree overlay - after the conflicting HDMI configuration is manually disabled.

"echo w1 >/sys/devices/bone_capemgr.9/slots"

So can I turn on a pullup at boot time for a kernel module that isn't enabled at boot time?

Maybe the kernel parameters need to go into the device tree overlay that starts the operation of the affected kernel modules?

The overlay source does mention w1-gpio, but not w1-therm:
---
fragment@1 {
      target = <&ocp>;
      __overlay__ {
          onewire@0 {
              status          = "okay";
              compatible      = "w1-gpio";
              pinctrl-names   = "default";
              pinctrl-0       = <&bb_w1_pins>;
              gpios = <&gpio2 13 0>;
          };
      };
  };
---
I don't really see how to add parameters to that.


I'd really appreciate some detailed guidance on how to pass the parameters that will force the strong pullup on! Or any other clues on how to get the w1 strong pullup to work on the BBB.


Reply all
Reply to author
Forward
0 new messages