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