On 05/12/14 15:10, bruce bushby wrote:

> I'm attempting to add this kernel module:
> https://github.com/tallakt/servodrive/blob/master/files/servodrive.c
> 
> But I don't know what gpio.h I can use....any ideas?

looks like it uses include/linux/gpio.h from within the kernel source tree, 
however, I think for this module you want to have a look at
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/gpio/gpio-legacy.txt

> Is the "pinctrl-sunxi" module used to setup/configure pins? .... or are
> their functions first defined in the DTS and then "enabled" via the
> "pinctrl-sunxi" module?

err.. yes to both :) 

from the POV of a driver wanting to access some gpios perhaps you need to 
have a look at
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/gpio/consumer.txt

the devicetree part only comes into play for drivers that understand how
to look up their resources in DT. This makes the difference that you don't
have to hard-code the pins you want to use in the driver source code. 
The driver can just lookup it's compatible string in DT and use that to 
bind to the specific resources defined in the DT.

> This describes calculating the pin number:
> http://linux-sunxi.org/GPIO#Accessing_the_GPIO_pins_through_sysfs_with_mainline_kernel

Yes, however that documents how to access them from userspace via /sys, your
driver is a kernel module so it needs to use the proper internal kernel
interface

> Excuse all the questions but I'm struggling to understand how or what
> gpio.h I would use to implement the servodrive module.

This one I expect:
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/linux/gpio.h

To build your driver you need to do something like

make -C <path_to_kernel_src> M=$PWD

where you replace <path_to_kernel_src> with the directory you built your
kernel in. It's possible this can be /lib/modules/`uname -r`/build
if the kernel you want the module built for is the currently running
kernel, but this gets somewhat complex if you're cross compiling for 
Arm on an x86 PC.
https://www.kernel.org/doc/Documentation/kbuild/modules.txt gives some 
hints on how to go about building external modules like your servodrive.

note that the servodrive module seems to date from 2010, it's quite possible
you'll have some work to do to make it compile and work with the 3.18-rc3
you're running. Out-of-tree drivers like this can bit-rot quite quickly.

good luck!

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" 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