159c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich/*
259c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich * AD5504 SPI DAC driver
359c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich *
459c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich * Copyright 2011 Analog Devices Inc.
559c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich *
659c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich * Licensed under the GPL-2.
759c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich */
859c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich
959c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#ifndef SPI_AD5504_H_
1059c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define SPI_AD5504_H_
1159c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich
1259c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define AD5505_BITS			12
1359c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define AD5504_RES_MASK			((1 << (AD5505_BITS)) - 1)
1459c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich
1559c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define AD5504_CMD_READ			(1 << 15)
1659c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define AD5504_CMD_WRITE		(0 << 15)
1759c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define AD5504_ADDR(addr)		((addr) << 12)
1859c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich
1959c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich/* Registers */
2059c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define AD5504_ADDR_NOOP		0
21a7b152881cee97c2d9d19a9d2b712ba0bbc96843Lars-Peter Clausen#define AD5504_ADDR_DAC(x)		((x) + 1)
2259c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define AD5504_ADDR_ALL_DAC		5
2359c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define AD5504_ADDR_CTRL		7
2459c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich
2559c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich/* Control Register */
2659c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define AD5504_DAC_PWR(ch)		((ch) << 2)
2759c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define AD5504_DAC_PWRDWN_MODE(mode)	((mode) << 6)
2859c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define AD5504_DAC_PWRDN_20K		0
2959c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#define AD5504_DAC_PWRDN_3STATE		1
3059c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich
3159c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich/*
3259c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich * TODO: struct ad5504_platform_data needs to go into include/linux/iio
3359c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich */
3459c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich
3559c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerichstruct ad5504_platform_data {
3659c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich	u16				vref_mv;
3759c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich};
3859c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich
3959c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich/**
4059c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich * struct ad5446_state - driver instance specific data
4159c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich * @us:			spi_device
4259c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich * @reg:		supply regulator
4359c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich * @vref_mv:		actual reference voltage used
4459c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich * @pwr_down_mask	power down mask
4559c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich * @pwr_down_mode	current power down mode
4659c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich */
4759c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich
4859c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerichstruct ad5504_state {
4959c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich	struct spi_device		*spi;
5059c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich	struct regulator		*reg;
5159c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich	unsigned short			vref_mv;
5259c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich	unsigned			pwr_down_mask;
5359c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich	unsigned			pwr_down_mode;
5459c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich};
5559c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich
5659c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich/**
5759c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich * ad5504_supported_device_ids:
5859c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich */
5959c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich
6059c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerichenum ad5504_supported_device_ids {
6159c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich	ID_AD5504,
6259c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich	ID_AD5501,
6359c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich};
6459c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich
6559c23eabdae97a18cfc400339138f6d1dbde926aMichael Hennerich#endif /* SPI_AD5504_H_ */
66