我有一个i2c设备,内置于我正在开发的电路板中。它响应单个地址,但第一个字节(有时称为"命令"或"寄存器")决定了所处理的功能。
我可以使用i2cset/get/detect
用户空间中的设备,所以我知道一切正常。
设备控制LED(因此应显示在/sys/class/leds
)。
它还有GPIO(因此应该出现在/sys/class/gpio
)。
还有六个不同的地方应该出现部分设备的功能。
我应该将其编码为:
/sys
的正确位置列出内容的方法。(这是我自2.4版本或2.6版本以来的第一个内核模块,它是很久以前的事了。)
答案 0 :(得分:2)
在linux源代码中看看wm8350模块。它由一个绑定到i2c总线的核心模块和许多使用核心模块API访问芯片寄存器的子平台模块组成。
核心模块包括:
GPIO模块包括:
在核心模块初始化期间wm8350_i2c_probe()被调用。它调用wm8350_device_init()。它使用wm8350_client_dev_register()创建子平台设备。
子模块drivers/gpio/gpio-wm8350.c注册为"平台的模块:wm8350-gpio"它的切入点是wm8350_gpio_probe()。
为了访问核心模块,GPIO模块执行:
107 static int wm8350_gpio_probe(struct platform_device *pdev)
108 {
109 struct wm8350 *wm8350 = dev_get_drvdata(pdev->dev.parent);
然后它调用类似
的东西36 return wm8350_set_bits(wm8350, WM8350_GPIO_CONFIGURATION_I_O,
37 1 << offset);