请教嵌入式Linux下调试温湿度传感器(SHT10)驱动程序碰到问题

[复制链接]
2514|0
 楼主| chenbo35 发表于 2008-12-15 10:31 | 显示全部楼层 |阅读模式
我的开发平台是pxa310,通过在驱动程序中模拟GPIO来读取SHT10的温湿度数据,Linux内核2.6.在驱动程序中没有读到SHT10的应答信号,发送命令以后SHT10&nbsp;DATA引脚没有被拉低.示波器上面看到在SCK第8个下降沿跳低,在第9个SCK下降沿跳高,但是电平就跳低到2.3V,没有跳低到0.8V以下,后面的数据也没有读出来.但是我将这段程序移植到BLOB下面,不改变时序,只换用BLOB下对GPIO控制的接口函数,倒可以把数据读出来,而且数据正常,不知道是什么问题想请教一下.中间重新编译过内核,和这个会有关吗?下面是我的驱动程序<br />#include&nbsp;&ltlinux/module.h&gt<br />#include&nbsp;&ltlinux/kernel.h&gt<br />#include&nbsp;&ltlinux/miscdevice.h&gt<br />#include&nbsp;&ltlinux/delay.h&gt<br />#include&nbsp;&ltlinux/spinlock.h&gt<br />#include&nbsp;&ltlinux/fs.h&gt<br />#include&nbsp;&ltlinux/ioctl.h&gt<br />#include&nbsp;&ltlinux/completion.h&gt<br />#include&nbsp;&ltlinux/interrupt.h&gt<br />#include&nbsp;&ltlinux/delay.h&gt<br />#include&nbsp;&ltasm/arch/pxa3xx_gpio.h&gt<br />#include&nbsp;&ltasm/arch/pxa-regs.h&gt<br />#include&nbsp;&ltasm/arch/mfp.h&gt<br />#include&nbsp;&ltasm/uaccess.h&gt<br /><br />#define&nbsp;DEVICE_NAME&nbsp;&quot;sht10&quot;<br /><br />#define&nbsp;noACK&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;<br />#define&nbsp;ACK&nbsp;&nbsp;&nbsp;&nbsp;1<br />#define&nbsp;MEASURE_TEMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03<br />#define&nbsp;MEASURE_HUMI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x05<br />#define&nbsp;MEASURE_REGI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x07<br />#define&nbsp;MEASURE_RESET&nbsp;&nbsp;&nbsp;&nbsp;0x1e<br />#define&nbsp;ARRAY_SIZE(x)&nbsp;&nbsp;&nbsp;&nbsp;(sizeof(x)&nbsp;/&nbsp;sizeof((x)[0]))<br />#define&nbsp;OSCC_REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x41350000<br />/*static&nbsp;sht10_do_tasklet(void);<br />DECLARE_TASKLET(sht10_tasklet,sht10_do_tasklet,0);<br /><br />DECLARE_COMPLETION(comp);<br />*/<br />enum&nbsp;{TEMP,HUMI,REGI};<br />unsigned&nbsp;char&nbsp;buf[4]={0};<br /><br />static&nbsp;void&nbsp;delay(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt2000;i++);<br />//&nbsp;&nbsp;&nbsp;&nbsp;mdelay(10);<br />}<br /><br />static&nbsp;void&nbsp;port_init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;pxa3xx_gpio_set_direction(79,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;pxa3xx_gpio_set_direction(78,1);<br />}<br /><br />static&nbsp;void&nbsp;data_output(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;pxa3xx_gpio_set_direction(78,1);<br />}<br /><br />static&nbsp;void&nbsp;data_input(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;pxa3xx_gpio_set_direction(78,0);<br />}<br /><br />static&nbsp;void&nbsp;set_sck(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;pxa3xx_gpio_set_level(79,1);<br />}<br /><br />static&nbsp;void&nbsp;clear_sck(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;pxa3xx_gpio_set_level(79,0);<br />}<br /><br />static&nbsp;void&nbsp;set_data(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;pxa3xx_gpio_set_level(78,1);<br />}<br /><br />static&nbsp;void&nbsp;clear_data(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;pxa3xx_gpio_set_level(78,0);<br />}<br /><br />static&nbsp;int&nbsp;read_data(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;level=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pxa3xx_gpio_set_direction(78,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;level=pxa3xx_gpio_get_level(78);<br />&nbsp;&nbsp;&nbsp;&nbsp;pxa3xx_gpio_set_direction(78,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;level;<br />}<br /><br />static&nbsp;void&nbsp;start_trans(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;set_data();clear_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;set_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;clear_data();<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;clear_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;clear_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;clear_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;set_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;set_data();<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;clear_sck();<br />}<br /><br />static&nbsp;void&nbsp;reset_sht10(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;set_data();<br />&nbsp;&nbsp;&nbsp;&nbsp;clear_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt9;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clear_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;start_trans();<br />}<br /><br />static&nbsp;char&nbsp;write_byte(unsigned&nbsp;char&nbsp;value)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i,error=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0x80;i&gt0;i&gt&gt=1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&nbsp;&&nbsp;value)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set_data();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clear_data();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay();//delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clear_sck();&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;set_data();<br />&nbsp;&nbsp;&nbsp;&nbsp;set_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;error=read_data();<br />&nbsp;&nbsp;&nbsp;&nbsp;//printk(&quot;write&nbsp;byte&nbsp;read&nbsp;error=0x%x
&quot;,error);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();delay();delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;clear_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;error;<br />}<br /><br />static&nbsp;char&nbsp;read_byte(unsigned&nbsp;char&nbsp;ack)<br />{<br />unsigned&nbsp;char&nbsp;i,val=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;set_data();<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0x80;i&gt0;i/=2)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(read_data()){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val=(val|i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;delay();//delay();delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clear_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;//data_output();<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;if(ack==1){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clear_data();<br />&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set_data();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();//delay();delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;set_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();delay();delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;clear_sck();<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();//delay();delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;set_data();<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;val;<br />}<br /><br />static&nbsp;int&nbsp;measure_sht10(unsigned&nbsp;char&nbsp;checksum,unsigned&nbsp;char&nbsp;mode)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;error=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;start_trans();<br />&nbsp;&nbsp;&nbsp;&nbsp;switch(mode)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;TEMP:error+=write_byte(MEASURE_TEMP);i=1;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;HUMI:error+=write_byte(MEASURE_HUMI);break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(read_data()==0)&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if(read_data())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error+=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;time&nbsp;out&nbsp;high&nbsp;level&nbsp;error+1
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;//printk(&quot;after&nbsp;receive&nbsp;ack
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(i){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[0]=read_byte(ACK);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[1]=read_byte(ACK);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;buf[0]=0x%x
&quot;,buf[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;buf[1]=0x%x
&quot;,buf[1]);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[2]=read_byte(ACK);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[3]=read_byte(ACK);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;buf[2]=0x%x
&quot;,buf[2]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;buf[3]=0x%x
&quot;,buf[3]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;checksum=read_byte(noACK);<br />&nbsp;&nbsp;&nbsp;&nbsp;//printk(&quot;ready&nbsp;to&nbsp;return
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;error;<br />}<br /><br />/*static&nbsp;int&nbsp;sht10_do_tasklet(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;error=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;checksum=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;error+=measure_sht10(checksum,TEMP);&nbsp;&nbsp;&nbsp;&nbsp;//measure&nbsp;the&nbsp;temperature<br />&nbsp;&nbsp;&nbsp;&nbsp;error+=measure_sht10(checksum,HUMI);&nbsp;&nbsp;&nbsp;&nbsp;//measure&nbsp;the&nbsp;humidity<br />&nbsp;&nbsp;&nbsp;&nbsp;//error+=measure_sht10(checksum,REGI);&nbsp;&nbsp;&nbsp;&nbsp;//measure&nbsp;the&nbsp;humidity<br />&nbsp;&nbsp;&nbsp;&nbsp;complete(&comp);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(error!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;wrong&nbsp;in&nbsp;measure&nbsp;error==&gt%d
&quot;,error);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;data&nbsp;correct!
&quot;);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;error;<br />}*/<br /><br />static&nbsp;ssize_t&nbsp;sht10_read(struct&nbsp;file&nbsp;*file,char&nbsp;*buffer,size_t&nbsp;count,loff_t&nbsp;*offp)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;error=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;checksum=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;port_init();<br />&nbsp;&nbsp;&nbsp;&nbsp;reset_sht10();<br />&nbsp;&nbsp;&nbsp;&nbsp;error+=measure_sht10(checksum,TEMP);&nbsp;&nbsp;&nbsp;&nbsp;//measure&nbsp;the&nbsp;temperature<br />&nbsp;&nbsp;&nbsp;&nbsp;error+=measure_sht10(checksum,HUMI);&nbsp;&nbsp;&nbsp;&nbsp;//measure&nbsp;the&nbsp;humidity<br />//&nbsp;&nbsp;&nbsp;&nbsp;tasklet_schedule(&sht10_tasklet);<br />//&nbsp;&nbsp;&nbsp;&nbsp;wait_for_completion(&comp);<br />&nbsp;&nbsp;&nbsp;&nbsp;copy_to_user(buffer,(char&nbsp;*)&buf,sizeof(buf));<br />//&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;//printk(&quot;after&nbsp;copy&nbsp;to&nbsp;user
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(error!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;wrong&nbsp;in&nbsp;measure&nbsp;error==&gt%d
&quot;,error);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;data&nbsp;correct!
&quot;);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;error;<br />}<br /><br />static&nbsp;struct&nbsp;file_operations&nbsp;sht10_fops&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;owner:&nbsp;&nbsp;&nbsp;&nbsp;THIS_MODULE,<br />&nbsp;&nbsp;&nbsp;&nbsp;read:&nbsp;&nbsp;&nbsp;&nbsp;sht10_read,<br />};<br /><br />static&nbsp;struct&nbsp;miscdevice&nbsp;my_sht10&nbsp;={<br />&nbsp;&nbsp;&nbsp;&nbsp;.minor=4,<br />&nbsp;&nbsp;&nbsp;&nbsp;.name=&quot;sht10&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;.fops=&sht10_fops,<br />};<br /><br />struct&nbsp;pxa3xx_pin_config&nbsp;littleton_sensor_pins[]&nbsp;=&nbsp;{<br />PXA3xx_MFP_CFG(&quot;SENSOR_DATA&quot;,&nbsp;MFP_PIN_GPIO78,&nbsp;MFP_AF0,&nbsp;MFP_DS10X,&nbsp;0,&nbsp;MFP_LPM_PULL_NEITHER,MFP_EDGE_NONE),&nbsp;&nbsp;&nbsp;&nbsp;<br />PXA3xx_MFP_CFG(&quot;SENSOR_SCK&quot;,&nbsp;&nbsp;MFP_PIN_GPIO79,&nbsp;MFP_AF0,&nbsp;MFP_DS10X,&nbsp;0,&nbsp;MFP_LPM_PULL_NEITHER,MFP_EDGE_NONE),&nbsp;&nbsp;&nbsp;&nbsp;<br />};<br /><br />void&nbsp;pxa3xx_enable_sensor_pins(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;pxa3xx_mfp_set_configs(littleton_sensor_pins,ARRAY_SIZE(littleton_sensor_pins));<br />}<br /><br />static&nbsp;int&nbsp;__init&nbsp;sht10_init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;misc_register(&my_sht10);<br />&nbsp;&nbsp;&nbsp;&nbsp;pxa3xx_enable_sensor_pins();<br />&nbsp;&nbsp;&nbsp;&nbsp;printk(DEVICE_NAME&nbsp;&quot;&nbsp;initialized
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />static&nbsp;void&nbsp;__exit&nbsp;sht10_exit(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;misc_deregister(&my_sht10);<br />}<br /><br />module_init(sht10_init);<br />module_exit(sht10_exit);<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部