Firefly-rk3288 I2C 驱动

本帖最后由 F_madman 于 2017-2-9 18:24 编辑

之前学习的过程中大概整理了下pwm和spi的驱动,现在继续整理下i2c的驱动,只是一个简单的收发程序配了个proc的接口。感觉相对来说i2c的驱动还是比较简便的。在对应的i2c上加上dts的配置:

+        vol@34 {
+                compatible = "nxp,volume";
+                reg = <0x34>;
+        };

配置好Makefile

--- a/kernel/drivers/Makefile
+++ b/kernel/drivers/Makefile
@@ -157,3 +157,4 @@ obj-$(CONFIG_NTB)           += ntb/
 obj-$(CONFIG_GATOR)            += gator/
 obj-y                          += headset_observe/
+obj-y                          += volume_control.o

因为懒~所以只配了Makefile,没配Kconfig~{:3_55:}

下面是驱动的代码。有需要的初学者可以看看
ps:
经论坛的朋友提醒
大家要用这个驱动的话
去掉MODULE_DEVICE_TABLE(of, volume_of_match);这句

更新个i2c oled的驱动,源码见附件
volume_control.zip (1.89 KB)
oled.c.zip (5.27 KB)

:victory:支持

晒晒 SPI接口的指纹识别,在firefly3288上

赞一个!

请问:I2C4的GPIO要用做普通GPIO的话,删除设备树中的配置就可以了吗?

junhai 发表于 2016-3-28 22:36
请问:I2C4的GPIO要用做普通GPIO的话,删除设备树中的配置就可以了吗?

dts里disabled掉,然后按普通io那样申请使用就可以了

madman 发表于 2016-3-29 08:59
dts里disabled掉,然后按普通io那样申请使用就可以了

i2c4: i2c@ff160000 {
	compatible = "rockchip,rk30-i2c";
	reg = <0xff160000 0x1000>;
	interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
	#address-cells = <1>;
	#size-cells = <0>;
	pinctrl-names = "default", "gpio";
	pinctrl-0 = <&i2c4_sda &i2c4_scl>;
	pinctrl-1 = <&i2c4_gpio>;
	gpios = <&gpio7 GPIO_C1 GPIO_ACTIVE_LOW>, <&gpio7 GPIO_C2 GPIO_ACTIVE_LOW>;
	clocks = <&clk_gates6 15>;
	rockchip,check-idle = <1>;
	status = "disabled";
};

i2c4在dts中的status = "disabled"的,但是为什么dev/下还有i2c4设备(crw-rw-rw- root root 89, 4 2011-01-01 12:00 i2c-4)?
我在自己的驱动中申请gpio是失败的啊!

去dts里面disabled,你这个是dtsi里面的,dts使能了的话会覆盖dtsi

用的是谁家的模块啊

carlinluo 发表于 2016-2-24 11:59
晒晒 SPI接口的指纹识别,在firefly3288上

用的是哪家的模块啊,可以给个链接吗

madman 发表于 2016-3-29 14:04
去dts里面disabled,你这个是dtsi里面的,dts使能了的话会覆盖dtsi

谢谢,

madman 发表于 2016-3-29 14:04
去dts里面disabled,你这个是dtsi里面的,dts使能了的话会覆盖dtsi

dts里只有这个啊
&i2c4 {
status = “okay”;
ts@55 {
compatible = “goodix,gt8xx”;
reg = <0x55>;
touch-gpio = <&gpio7 GPIO_A6 IRQ_TYPE_LEVEL_LOW>;
reset-gpio = <&gpio7 GPIO_A5 GPIO_ACTIVE_LOW>;
//power-gpio = <&gpio0 GPIO_C5 GPIO_ACTIVE_LOW>;
max-x = <1280>;
max-y = <800>;
};

ts@01 {
	compatible = "ct,vtl_ts";
	reg = <0x01>;
	screen_max_x = <2048>;
	screen_max_y = <1536>;
	irq_gpio_number = <&gpio7 GPIO_A6 IRQ_TYPE_LEVEL_LOW>;
	rst_gpio_number = <&gpio7 GPIO_A5 GPIO_ACTIVE_HIGH>;
};

};

status = “okay”;改成 status = “disabled”;就好了~

其实你自己写的代码里面关于of_device_id和i2c_device_id是搞混淆了的,版主没仔细看吗,这会给人误导的

有学习了具体的东西,每天在各位大神的指导下进步一点点,谢谢

good job…

xiaofei 发表于 2016-7-26 10:13
good job…

楼主 注意查看你的of_device_id 与i2c_device_id哦

LZ能否分享下红外IR控制的例子

太好了,学习学习

太好了,学习学习