diff options
| author | wdenk <wdenk> | 2003-05-31 18:35:21 +0000 | 
|---|---|---|
| committer | wdenk <wdenk> | 2003-05-31 18:35:21 +0000 | 
| commit | 7a8e9bed17d7924a9c5c4699b1f6a3a0359524ed (patch) | |
| tree | 5c273df9c5efa7b1b6a4ca88904e48039ef591e8 /drivers/ds1722.c | |
| parent | 3b57fe0a70b903f4db66c558bb9828bc58acf06b (diff) | |
| download | olio-uboot-2014.01-7a8e9bed17d7924a9c5c4699b1f6a3a0359524ed.tar.xz olio-uboot-2014.01-7a8e9bed17d7924a9c5c4699b1f6a3a0359524ed.zip | |
* Patch by Marc Singer, 29 May 2003:LABEL_2003_05_31_2115
  Fixed rarp boot method for IA32 and other little-endian CPUs.
* Patch by Marc Singer, 28 May 2003:
  Added port I/O commands.
* Patch by Matthew McClintock, 28 May 2003
  - cpu/mpc824x/start.S: fix relocation code when booting from RAM
  - minor patches for utx8245
* Patch by Daniel Engström, 28 May 2003:
  x86 update
* Patch by Dave Ellis, 9 May 2003 + 27 May 2003:
  add nand flash support to SXNI855T configuration
  fix/extend nand flash support:
  - fix 'nand erase' command so does not erase bad blocks
  - fix 'nand write' command so does not write to bad blocks
  - fix nand_probe() so handles no flash detected properly
  - add doc/README.nand
  - add .jffs2 and .oob options to nand read/write
  - add 'nand bad' command to list bad blocks
  - add 'clean' option to 'nand erase' to write JFFS2 clean markers
  - make NAND read/write faster
* Patch by Rune Torgersen, 23 May 2003:
  Update for MPC8266ADS board
Diffstat (limited to 'drivers/ds1722.c')
| -rw-r--r-- | drivers/ds1722.c | 142 | 
1 files changed, 142 insertions, 0 deletions
| diff --git a/drivers/ds1722.c b/drivers/ds1722.c new file mode 100644 index 000000000..34eb80ca2 --- /dev/null +++ b/drivers/ds1722.c @@ -0,0 +1,142 @@ + +#include <common.h> + +#include <ssi.h> + +#ifdef CONFIG_DS1722 + +static void ds1722_select(int dev) +{ +	ssi_set_interface(4096, 0, 0, 0); +	ssi_chip_select(0); +	udelay(1); +	ssi_chip_select(dev); +	udelay(1); +} + + +u8 ds1722_read(int dev, int addr) +{ +	u8 res; +	 +	ds1722_select(dev); +	 +	ssi_tx_byte(addr);	 +	res = ssi_rx_byte();   	 +	 +	ssi_chip_select(0); +	 +	return res; +} + +void ds1722_write(int dev, int addr, u8 data) +{ +	ds1722_select(dev); +	 +	ssi_tx_byte(0x80|addr);	 +	ssi_tx_byte(data);   	 +	 +	ssi_chip_select(0); +} + + +u16 ds1722_temp(int dev, int resolution) +{ +	static int useconds[] = { +		75000, 150000, 300000, 600000, 1200000  +	}; +	char temp; +	u16 res; +	 +	 +	/* set up the desired resulotion ... */ +	ds1722_write(dev, 0, 0xe0 | (resolution << 1)); +			 +	/* wait while the chip measures the tremperature */ +	udelay(useconds[resolution]); 	 +	 +	res = (temp = ds1722_read(dev, 2)) << 8; +	 +	if (temp < 0) {  +		temp = (16 - (ds1722_read(dev, 1) >> 4)) & 0x0f; +	} else { +		temp = (ds1722_read(dev, 1) >> 4); +	} +	 +	switch (temp) { +	case 0: +		/* .0000 */ +		break; +	case 1: +		/* .0625 */ +		res |=1; +		break; +	case 2: +		/* .1250 */ +		res |=1; +		break; +	case 3: +		/* .1875 */ +		res |=2; +		break; +	case 4: +		/* .2500 */ +		res |=3; +		break; +	case 5: +		/* .3125 */ +		res |=3; +		break; +	case 6: +		/* .3750 */ +		res |=4; +		break; +	case 7: +		/* .4375 */ +		res |=4; +		break; +	case 8: +		/* .5000 */ +		res |=5; +		break; +	case 9: +		/* .5625 */ +		res |=6; +		break; +	case 10: +		/* .6250 */ +		res |=6; +		break; +	case 11: +		/* .6875 */ +		res |=7; +		break; +	case 12: +		/* .7500 */ +		res |=8; +		break; +	case 13: +		/* .8125 */ +		res |=8; +		break; +	case 14: +		/* .8750 */ +		res |=9; +		break; +	case 15: +		/* .9375 */ +		res |=9; +		break; +	} +	return res; +			 +} + +int ds1722_probe(int dev) +{ +	u16 temp = ds1722_temp(dev, DS1722_RESOLUTION_12BIT); +	printf("%d.%d deg C\n\n", (char)(temp >> 8), temp & 0xff); +	return 0; +} + +#endif |