<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.mediawiki.compulab.com/w/index.php?action=history&amp;feed=atom&amp;title=Ds1722.c</id>
	<title>Ds1722.c - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.mediawiki.compulab.com/w/index.php?action=history&amp;feed=atom&amp;title=Ds1722.c"/>
	<link rel="alternate" type="text/html" href="https://www.mediawiki.compulab.com/w/index.php?title=Ds1722.c&amp;action=history"/>
	<updated>2026-05-02T12:24:53Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://www.mediawiki.compulab.com/w/index.php?title=Ds1722.c&amp;diff=174&amp;oldid=prev</id>
		<title>Mike: New page: This is a sample driver module for ''Dallas Semiconductor'' Digital Thermometer '''DS1722''': &lt;pre&gt; #include &lt;linux/hwmon.h&gt; #include &lt;linux/init.h&gt; #include &lt;linux/err.h&gt; #include &lt;linux/...</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.compulab.com/w/index.php?title=Ds1722.c&amp;diff=174&amp;oldid=prev"/>
		<updated>2008-04-28T06:52:14Z</updated>

		<summary type="html">&lt;p&gt;New page: This is a sample driver module for &amp;#039;&amp;#039;Dallas Semiconductor&amp;#039;&amp;#039; Digital Thermometer &amp;#039;&amp;#039;&amp;#039;DS1722&amp;#039;&amp;#039;&amp;#039;: &amp;lt;pre&amp;gt; #include &amp;lt;linux/hwmon.h&amp;gt; #include &amp;lt;linux/init.h&amp;gt; #include &amp;lt;linux/err.h&amp;gt; #include &amp;lt;linux/...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This is a sample driver module for ''Dallas Semiconductor'' Digital Thermometer '''DS1722''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/hwmon.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/init.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/err.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/spi/spi.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;asm/arch/pxa-regs.h&amp;gt;&lt;br /&gt;
#include &amp;lt;asm/arch/pxa2xx_spi.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* defining another CE pin: sb270 p16 pin 45 */&lt;br /&gt;
#define DS1722_FRAME_GPIO 107&lt;br /&gt;
&lt;br /&gt;
/* ds1722 CE Inactive time is 400ns - sleeping for 1ms */&lt;br /&gt;
#define CE_WAIT_MSEC 1&lt;br /&gt;
 &lt;br /&gt;
extern int pxa_gpio_mode(int);&lt;br /&gt;
extern void pxa_gpio_set_value(unsigned gpio, int value);&lt;br /&gt;
extern int gpio_direction_output(unsigned gpio, int value);&lt;br /&gt;
&lt;br /&gt;
static int set_pxa_spi_gpio_config(void)&lt;br /&gt;
{&lt;br /&gt;
	int modes_num = 4, ret = 0, i = 0;&lt;br /&gt;
	int mode[] = {	GPIO23_SCLK_MD,&lt;br /&gt;
			GPIO24_SFRM_MD,&lt;br /&gt;
			GPIO25_STXD_MD,&lt;br /&gt;
			GPIO26_SRXD_MD };&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; modes_num; i++)&lt;br /&gt;
		if ((ret = pxa_gpio_mode(mode[i])) != 0)&lt;br /&gt;
			return ret;&lt;br /&gt;
	/* setting up alternative gpio frame - CE */&lt;br /&gt;
	return gpio_direction_output(DS1722_FRAME_GPIO, 0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static int __devinit ds1722_probe(struct spi_device *spi)&lt;br /&gt;
{&lt;br /&gt;
	int ret = 0;&lt;br /&gt;
	u8 in[4] = { 0 };&lt;br /&gt;
&lt;br /&gt;
	/* Setup spi */&lt;br /&gt;
	ret = spi_setup(spi);&lt;br /&gt;
&lt;br /&gt;
	in[0] = 0x80; in[1] = 0x00;&lt;br /&gt;
	printk(KERN_INFO &amp;quot;\nWriting configuration to register:\t0x%x&amp;quot;, in[0]);&lt;br /&gt;
	mdelay(CE_WAIT_MSEC);&lt;br /&gt;
	pxa_gpio_set_value(DS1722_FRAME_GPIO, 1);		/* Set CE HIGH */&lt;br /&gt;
	ret = spi_write(spi,in,2);&lt;br /&gt;
	pxa_gpio_set_value(DS1722_FRAME_GPIO, 0);		/* Set CE LOW */&lt;br /&gt;
	printk(KERN_INFO &amp;quot;\n%s:\tin\t=\t\t0x%x,0x%x&amp;quot;, &amp;quot;spi_write&amp;quot;, in[0], in[1]);&lt;br /&gt;
	printk(KERN_INFO &amp;quot;\n%s: returned\t\t\t%d\n&amp;quot;, &amp;quot;spi_write&amp;quot;, ret);&lt;br /&gt;
	&lt;br /&gt;
	in[0] = 0x00; in[1] = 0x00;&lt;br /&gt;
	printk(KERN_INFO &amp;quot;\nReading configuration from register:\t0x%x&amp;quot;, in[0]);&lt;br /&gt;
	mdelay(CE_WAIT_MSEC);&lt;br /&gt;
	pxa_gpio_set_value(DS1722_FRAME_GPIO, 1);		/* Set CE HIGH */&lt;br /&gt;
	ret = spi_w8r8(spi,in[0]);&lt;br /&gt;
	pxa_gpio_set_value(DS1722_FRAME_GPIO, 0);		/* Set CE LOW */&lt;br /&gt;
	printk(KERN_INFO &amp;quot;\n%s: returned\t\t\t0x%x\n&amp;quot;, &amp;quot;spi_w8r8&amp;quot;, ret);&lt;br /&gt;
	&lt;br /&gt;
	in[0] = 0x02; in[1] = 0x00;&lt;br /&gt;
	printk(KERN_INFO &amp;quot;\nReading temperature MSB from register:\t0x%x&amp;quot;, in[0]);&lt;br /&gt;
	mdelay(CE_WAIT_MSEC);&lt;br /&gt;
	pxa_gpio_set_value(DS1722_FRAME_GPIO, 1);		/* Set CE HIGH */&lt;br /&gt;
	ret = spi_w8r8(spi,in[0]);&lt;br /&gt;
	pxa_gpio_set_value(DS1722_FRAME_GPIO, 0);		/* Set CE LOW */&lt;br /&gt;
	printk(KERN_INFO &amp;quot;\n%s: returned\t\t\t%d\n&amp;quot;, &amp;quot;spi_w8r8&amp;quot;, ret);&lt;br /&gt;
	&lt;br /&gt;
	in[0] = 0x01; in[1] = 0x00;&lt;br /&gt;
	printk(KERN_INFO &amp;quot;\nReading temperature LSB from register:\t0x%x&amp;quot;, in[0]);&lt;br /&gt;
	mdelay(CE_WAIT_MSEC);&lt;br /&gt;
	pxa_gpio_set_value(DS1722_FRAME_GPIO, 1);		/* Set CE HIGH */&lt;br /&gt;
	ret = spi_w8r8(spi,in[0]);&lt;br /&gt;
	pxa_gpio_set_value(DS1722_FRAME_GPIO, 0);		/* Set CE LOW */&lt;br /&gt;
	printk(KERN_INFO &amp;quot;\n%s: returned\t\t\t%d\n&amp;quot;, &amp;quot;spi_w8r8&amp;quot;, ret);&lt;br /&gt;
&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static int __devexit ds1722_remove(struct spi_device *spi)&lt;br /&gt;
{&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static struct spi_driver ds1722_driver = {&lt;br /&gt;
	.driver = {&lt;br /&gt;
		.name	= &amp;quot;ds1722_spi&amp;quot;,&lt;br /&gt;
		.bus	= &amp;amp;spi_bus_type,&lt;br /&gt;
		.owner	= THIS_MODULE,&lt;br /&gt;
	},&lt;br /&gt;
	.probe		= ds1722_probe,&lt;br /&gt;
	.remove		= __devexit_p(ds1722_remove),&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
static int __init ds1722_init(void)&lt;br /&gt;
{&lt;br /&gt;
	int ret = set_pxa_spi_gpio_config();&lt;br /&gt;
	if(ret &amp;lt; 0)&lt;br /&gt;
		return ret;&lt;br /&gt;
	&lt;br /&gt;
	return spi_register_driver(&amp;amp;ds1722_driver);&lt;br /&gt;
}&lt;br /&gt;
module_init(ds1722_init);&lt;br /&gt;
&lt;br /&gt;
static void __exit ds1722_exit(void)&lt;br /&gt;
{&lt;br /&gt;
	spi_unregister_driver(&amp;amp;ds1722_driver);&lt;br /&gt;
}&lt;br /&gt;
module_exit(ds1722_exit);&lt;br /&gt;
&lt;br /&gt;
MODULE_DESCRIPTION(&amp;quot;DS1722 SPI Thermometer Driver&amp;quot;);&lt;br /&gt;
MODULE_LICENSE(&amp;quot;GPL&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
back to: [[SPI support for CM-X270]]&lt;/div&gt;</summary>
		<author><name>Mike</name></author>
		
	</entry>
</feed>