ADC芯片CL1689驱动适配
-
内核中添加驱动
-
linux-3.10/drivers/iio/adc 目录下
-
在此目录下添加该CL1689 芯片的驱动代码:
- 由于A40I使用的spi驱动器是基于8bits基础上实现的,而网上的spi转adc的驱动应用大多数是基于16bits控制器实现的,因此需要修改驱动应用源码来适配,可以参考下列网址再进行具体改动,此处不贴修改后的源码 :
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/iio/adc/ad7949.c?id=7f40e0614317f20ac07b5aa5cec2eb43737e28d6
-
Makefile文件中添加该驱动的编译目标:
obj-$(CONFIG_AD_SIGMA_DELTA) += ad_sigma_delta.o obj-$(CONFIG_AD7266) += ad7266.o obj-$(CONFIG_AD7298) += ad7298.o obj-$(CONFIG_AD7923) += ad7923.o obj-$(CONFIG_AD7791) += ad7791.o obj-$(CONFIG_AD7793) += ad7793.o obj-$(CONFIG_AD7887) += ad7887.o obj-$(CONFIG_AD7476) += ad7476.o obj-$(CONFIG_AD7689) += ad7689.o obj-$(CONFIG_AD7949) += ad7949.o (增加) obj-$(CONFIG_AT91_ADC) += at91_adc.o obj-$(CONFIG_EXYNOS_ADC) += exynos_adc.o obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o obj-$(CONFIG_MAX1363) += max1363.o obj-$(CONFIG_MCP320X) += mcp320x.o obj-$(CONFIG_TI_ADC081C) += ti-adc081c.o obj-$(CONFIG_TI_AM335X_ADC) += ti_am335x_adc.o obj-$(CONFIG_VIPERBOARD_ADC) += viperboard_adc.o obj-$(CONFIG_VIPERBOARD_ADC) += viperboard_adc.o
-
Kconfig中添加该驱动的配置信息,注意在该Kconfig配置文件中增加配置信息需要与Makefile文件中编译目标驱动的顺序保持一致:
config AD7689 tristate "Analog Devices AD7689 and similar ADCs driver" depends on SPI help Say yes here to build support for Analog Devices AD7949, AD7682, AD7689 8 Channel ADCs. To compile this driver as a module, choose M here: the module will be called ad7949. config AD7949 tristate "Analog Devices ad7949 and similar ADCs driver" depends on SPI help Say yes here to build support for Analog Devices AD7949, AD7682, AD7689 8 Channel ADCs. To compile this driver as a module, choose M here: the module will be called ad7949. config AT91_ADC tristate "Atmel AT91 ADC" depends on ARCH_AT91 select IIO_BUFFER select IIO_TRIGGERED_BUFFER select SYSFS help Say yes here to build support for Atmel AT91 ADC.
-
-
-
使能 Industrial I/O support
-
修改设备树文件
-
lichee/linux-3.10/arch/arm/boot/tlt3_a40i-evm.dts
-
在设备上中添加该驱动信息
adc_supply: fixedregulator { compatible = "regulator-fixed"; regulator-name = "fixed-supply"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; }; &spi1 { status = "okay"; spi1_cs_number = <1>; spi1_cs_bitmap = <1>; ad7949:ad7949@0 { compatible = "adi,ad7949"; reg = <0>; spi-max-frequency = <1000000>; spi-cpha; spi-cpol; vref-supply = <&adc_supply>; }; };
-
-
lichee/linux-3.10/arch/arm/boot/sun8iw11p1.dtsi
-
lichee/tools/pack/chips/sun8iw11p1/configs/tlt3_a40i-evm/sys_config_hdmi.fex
-
修改前
[uart2] uart2_used = 1 uart2_port = 2 uart2_type = 2 uart2_tx = port:PI18<3><1><default><default> uart2_rx = port:PI19<3><1><default><default> [spi1] spi1_used = 0 spi1_cs_number = 2 spi1_cs_bitmap = 3 spi1_cs0 = port:PA0<3><1><default><default> spi1_cs1 = port:PA4<3><1><default><default> spi1_sclk = port:PA1<3><default><default><default> spi1_mosi = port:PA2<3><default><default><default> spi1_miso = port:PA3<3><default><default><default>
-
修改后
[uart2] uart2_used = 0 uart2_port = 2 uart2_type =
-
-