9
0
Fork 0

Fix logic error in configuring PGA11x devices in a daisy chain. Add logic interface with individual PGA11x chips in a daisy-chain

git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4979 7fd9a85b-ad96-42d3-883c-3090e2eb8679
This commit is contained in:
patacongo 2012-07-25 21:21:45 +00:00
parent 15d84f957f
commit 856152a1dd
2 changed files with 433 additions and 127 deletions

View File

@ -65,16 +65,16 @@
#define PGA11X_CMD_READ 0x6a00 #define PGA11X_CMD_READ 0x6a00
#define PGA11X_CMD_WRITE 0x2a00 #define PGA11X_CMD_WRITE 0x2a00
#define PGA11X_CMA_NOOP 0x0000 #define PGA11X_CMD_NOOP 0x0000
#define PGA11X_CMA_SDN_DIS 0xe100 #define PGA11X_CMD_SDN_DIS 0xe100
#define PGA11X_CMA_SDN_EN 0xe1f1 #define PGA11X_CMD_SDN_EN 0xe1f1
/* SPI Daisy-Chain Commands (PGA116/PGA117) */ /* SPI Daisy-Chain Commands (PGA116/PGA117) */
#define PGA11X_DCCMD_SELECTOR 0x8000 #define PGA11X_DCCMD_SELECTOR 0x8000
#define PGA11X_DCCMD_NOOP (PGA11X_DCCMD_SELECTOR | PGA11X_CMA_NOOP) #define PGA11X_DCCMD_NOOP (PGA11X_DCCMD_SELECTOR | PGA11X_CMD_NOOP)
#define PGA11X_DCCMA_SDN_DIS (PGA11X_DCCMD_SELECTOR | PGA11X_CMA_SDN_DIS) #define PGA11X_DCCMD_SDN_DIS (PGA11X_DCCMD_SELECTOR | PGA11X_CMD_SDN_DIS)
#define PGA11X_DCCMA_SDN_EN (PGA11X_DCCMD_SELECTOR | PGA11X_CMA_SDN_EN) #define PGA11X_DCCMD_SDN_EN (PGA11X_DCCMD_SELECTOR | PGA11X_CMD_SDN_EN)
#define PGA11X_DCCMD_READ (PGA11X_DCCMD_SELECTOR | PGA11X_CMD_READ) #define PGA11X_DCCMD_READ (PGA11X_DCCMD_SELECTOR | PGA11X_CMD_READ)
#define PGA11X_DCCMD_WRITE (PGA11X_DCCMD_SELECTOR | PGA11X_CMD_WRITE) #define PGA11X_DCCMD_WRITE (PGA11X_DCCMD_SELECTOR | PGA11X_CMD_WRITE)
@ -101,7 +101,7 @@
#define SPI_DUMMY 0xff #define SPI_DUMMY 0xff
/* Debug ****************************************************************************/ /* Debug ********************************************************************/
/* Check if (non-standard) SPI debug is enabled */ /* Check if (non-standard) SPI debug is enabled */
#ifndef CONFIG_DEBUG #ifndef CONFIG_DEBUG
@ -110,9 +110,9 @@
#endif #endif
#ifdef CONFIG_DEBUG_SPI #ifdef CONFIG_DEBUG_SPI
# define spidbg lldbg # define spidbg dbg
# ifdef CONFIG_DEBUG_VERBOSE # ifdef CONFIG_DEBUG_VERBOSE
# define spivdbg lldbg # define spivdbg dbg
# else # else
# define spivdbg(x...) # define spivdbg(x...)
# endif # endif
@ -293,6 +293,9 @@ static uint16_t pga11x_recv16(FAR struct spi_dev_s *spi)
* *
* Input Parameters: * Input Parameters:
* spi - PGA11X driver instance * spi - PGA11X driver instance
* cmd - PGA11X command (non-daisy chained)
* u1cmd - PGA11X U1 command (daisy chained)
* u2cmd - PGA11X U2 command (daisy chained)
* *
* Returned Value: * Returned Value:
* The received 16-bit value * The received 16-bit value
@ -316,17 +319,18 @@ static void pga11x_write(FAR struct spi_dev_s *spi, uint16_t cmd)
pga11x_unlock(spi); pga11x_unlock(spi);
} }
#else #else
static void pga11x_write(FAR struct spi_dev_s *spi, uint16_t u1cmd, uint16_t u2cmd)
{ {
spivdbg("cmd %04x\n", cmd); spivdbg("U1 cmd: %04x U2 cmd: %04x\n", u1cmd, u2cmd);
/* Lock, select, send the 16-bit command, the 16-bit daisy-chain command, /* Lock, select, send the U2 16-bit command, the U1 16-bit command, de-select,
* de-select, and un-lock. * and un-lock.
*/ */
pga11x_lock(spi); pga11x_lock(spi);
SPI_SELECT(spi, SPIDEV_MUX, true); SPI_SELECT(spi, SPIDEV_MUX, true);
pga11x_send16(spi, cmd); pga11x_send16(spi, u2cmd);
pga11x_send16(spi, cmd | PGA11X_DCCMD_SELECTOR); pga11x_send16(spi, u1cmd);
SPI_SELECT(spi, SPIDEV_MUX, false); SPI_SELECT(spi, SPIDEV_MUX, false);
pga11x_unlock(spi); pga11x_unlock(spi);
} }
@ -340,7 +344,7 @@ static void pga11x_write(FAR struct spi_dev_s *spi, uint16_t cmd)
* Name: pga11x_initialize * Name: pga11x_initialize
* *
* Description: * Description:
* Initialize the PGA117 amplifier/multiplexer. * Initialize the PGA117 amplifier/multiplexer(s).
* *
* Input Parameters: * Input Parameters:
* spi - An SPI "bottom half" device driver instance * spi - An SPI "bottom half" device driver instance
@ -376,61 +380,149 @@ PGA11X_HANDLE pga11x_initialize(FAR struct spi_dev_s *spi)
* Name: pga11x_select * Name: pga11x_select
* *
* Description: * Description:
* Select an input channel and gain. * Select an input channel and gain for all PGA11xs.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_select() configures
* both chips in the daisy-chain. pga11x_uselect() is provided to support
* configuring the parts in the daisychain independently.
* *
* Input Parameters: * Input Parameters:
* spi - An SPI "bottom half" device driver instance * spi - An SPI "bottom half" device driver instance
* channel - See the PGA11X_CHAN_* definitions above * settings - New channel and gain settings
* gain - See the PGA11X_GAIN_* definitions above
* *
* Returned Value: * Returned Value:
* Zero on sucess; a negated errno value on failure. * Zero on sucess; a negated errno value on failure.
* *
****************************************************************************/ ****************************************************************************/
int pga11x_select(PGA11X_HANDLE handle, uint8_t channel, uint8_t gain) int pga11x_select(PGA11X_HANDLE handle,
FAR const struct pga11x_settings_s *settings)
{ {
#ifndef CONFIG_PGA11X_DAISYCHAIN
FAR struct spi_dev_s *spi = (FAR struct spi_dev_s *)handle; FAR struct spi_dev_s *spi = (FAR struct spi_dev_s *)handle;
uint16_t cmd; uint16_t cmd;
spivdbg("channel: %d gain: %d\n"); DEBUGASSERT(handle && settings);
DEBUGASSERT(handle); spivdbg("channel: %d gain: %d\n", settings->channel, settings->gain);
/* Format the command */ /* Format the command */
cmd = PGA11X_CMD_WRITE | cmd = PGA11X_CMD_WRITE |
(channel << PGA11X_CHAN_SHIFT) | ((uint16_t)settings->channel << PGA11X_CHAN_SHIFT) |
(gain << PGA11X_GAIN_SHIFT); ((uint16_t)settings->gain << PGA11X_GAIN_SHIFT);
/* Lock the bus and send the command */ /* Send the command */
pga11x_write(spi, cmd); pga11x_write(spi, cmd);
return OK; return OK;
#else
FAR struct spi_dev_s *spi = (FAR struct spi_dev_s *)handle;
uint16_t u1cmd;
uint16_t u2cmd;
DEBUGASSERT(handle && settings);
spivdbg("U1 channel: %d gain: %d\n", settings->u1.channel, settings->u1.gain);
spivdbg("U1 channel: %d gain: %d\n", settings->u1.channel, settings->u1.gain);
/* Format the commands */
u1cmd = PGA11X_CMD_WRITE |
((uint16_t)settings->u1.channel << PGA11X_CHAN_SHIFT) |
((uint16_t)settings->u1.gain << PGA11X_GAIN_SHIFT);
u2cmd = PGA11X_DCCMD_WRITE |
((uint16_t)settings->u2.channel << PGA11X_CHAN_SHIFT) |
((uint16_t)settings->u2.gain << PGA11X_GAIN_SHIFT);
/* Send the command */
pga11x_write(spi, u1cmd, u2cmd);
return OK;
#endif
} }
/****************************************************************************
* Name: pga11x_uselect
*
* Description:
* Select an input channel and gain for one PGA11x.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_uselect() configures
* one chips in the daisy-chain.
*
* Input Parameters:
* spi - An SPI "bottom half" device driver instance
* pos - Position of the chip in the daisy chain (0 or 1)
* settings - New channel and gain settings
*
* Returned Value:
* Zero on sucess; a negated errno value on failure.
*
****************************************************************************/
#ifdef CONFIG_PGA11X_DAISYCHAIN
int pga11x_uselect(PGA11X_HANDLE handle, int pos,
FAR const struct pga11x_usettings_s *settings)
{
FAR struct spi_dev_s *spi = (FAR struct spi_dev_s *)handle;
uint16_t u1cmd;
uint16_t u2cmd;
spivdbg("channel: %d gain: %d\n", settings->channel, settings->gain);
DEBUGASSERT(handle);
/* Format the commands */
if (pos == 0)
{
u1cmd = PGA11X_CMD_WRITE |
((uint16_t)settings->channel << PGA11X_CHAN_SHIFT) |
((uint16_t)settings->gain << PGA11X_GAIN_SHIFT);
u2cmd = PGA11X_DCCMD_NOOP;
}
else /* if (pos == 1) */
{
u1cmd = PGA11X_CMD_NOOP;
u2cmd = PGA11X_DCCMD_WRITE |
((uint16_t)settings->channel << PGA11X_CHAN_SHIFT) |
((uint16_t)settings->gain << PGA11X_GAIN_SHIFT);
}
/* Send the command */
pga11x_write(spi, u1cmd, u2cmd);
return OK;
}
#endif
/**************************************************************************** /****************************************************************************
* Name: pga11x_read * Name: pga11x_read
* *
* Description: * Description:
* Read from the PGA117 amplifier/multiplexer. * Read from all PGA117 amplifier/multiplexers.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_read() reads from
* both chips in the daisy-chain. pga11x_uread() is provided to support
* accessing the parts independently.
* *
* Input Parameters: * Input Parameters:
* spi - An SPI "bottom half" device driver instance * spi - An SPI "bottom half" device driver instance
* settings - Returned channel and gain settings
* *
* Returned Value: * Returned Value:
* 16-bit value read from the device (32-bits in daisy chain mode) * Zero on sucess; a negated errno value on failure.
* *
****************************************************************************/ ****************************************************************************/
#ifdef CONFIG_PGA11X_DAISYCHAIN int pga11x_read(PGA11X_HANDLE handle, FAR struct pga11x_settings_s *settings)
uint32_t pga11x_read(PGA11X_HANDLE handle)
{ {
#ifdef CONFIG_PGA11X_DAISYCHAIN
FAR struct spi_dev_s *spi = (FAR struct spi_dev_s *)handle; FAR struct spi_dev_s *spi = (FAR struct spi_dev_s *)handle;
uint16_t msvalue; uint16_t u1value;
uint16_t lsvalue; uint16_t u2value;
spivdbg("Entry\n"); spivdbg("Entry\n");
DEBUGASSERT(handle); DEBUGASSERT(handle && settings);
/* Lock the bus and read the configuration */ /* Lock the bus and read the configuration */
@ -450,17 +542,20 @@ uint32_t pga11x_read(PGA11X_HANDLE handle)
/* Re-select, get the returned values, de-select, and unlock */ /* Re-select, get the returned values, de-select, and unlock */
SPI_SELECT(spi, SPIDEV_MUX, true); SPI_SELECT(spi, SPIDEV_MUX, true);
msvalue = pga11x_recv16(spi); u2value = pga11x_recv16(spi);
mssvalue = pga11x_recv16(spi); u1value = pga11x_recv16(spi);
SPI_SELECT(spi, SPIDEV_MUX, false); SPI_SELECT(spi, SPIDEV_MUX, false);
pga11x_unlock(spi); pga11x_unlock(spi);
spivdbg("Returning %04x %04x\n", msvalue, lsvalue); /* Decode the returned value */
return (uint32_t)msvalue << 16 | (uint32_t)lsvalue;
} spivdbg("Returning %04x %04x\n", u2value, u1value);
settings->u1.channel = (uint8_t)((u1value & PGA11X_CHAN_MASK) >> PGA11X_CHAN_SHIFT);
settings->u1.gain = (uint8_t)((u1value & PGA11X_GAIN_MASK) >> PGA11X_GAIN_SHIFT);
settings->u2.channel = (uint8_t)((u2value & PGA11X_CHAN_MASK) >> PGA11X_CHAN_SHIFT);
settings->u2.gain = (uint8_t)((u2value & PGA11X_GAIN_MASK) >> PGA11X_GAIN_SHIFT);
return OK;
#else #else
uint16_t pga11x_read(PGA11X_HANDLE handle)
{
FAR struct spi_dev_s *spi = (FAR struct spi_dev_s *)handle; FAR struct spi_dev_s *spi = (FAR struct spi_dev_s *)handle;
uint16_t value; uint16_t value;
@ -487,43 +582,67 @@ uint16_t pga11x_read(PGA11X_HANDLE handle)
SPI_SELECT(spi, SPIDEV_MUX, false); SPI_SELECT(spi, SPIDEV_MUX, false);
pga11x_unlock(spi); pga11x_unlock(spi);
/* Decode the returned value */
spivdbg("Returning: %04x\n", value); spivdbg("Returning: %04x\n", value);
return value; settings->channel = (uint8_t)((value & PGA11X_CHAN_MASK) >> PGA11X_CHAN_SHIFT);
} settings->gain = (uint8_t)((value & PGA11X_GAIN_MASK) >> PGA11X_GAIN_SHIFT);
return OK;
#endif #endif
}
/**************************************************************************** /****************************************************************************
* Name: pga11x_noop * Name: pga11x_uread
* *
* Description: * Description:
* Perform PGA11x no-operation. * Read from one PGA117 amplifier/multiplexer.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_read() reads
* the parts independently.
* *
* Input Parameters: * Input Parameters:
* spi - An SPI "bottom half" device driver instance * spi - An SPI "bottom half" device driver instance
* pos - Position of the chip in the daisy chain (0 or 1)
* settings - Returned channel and gain settings
* *
* Returned Value: * Returned Value:
* Zero on sucess; a negated errno value on failure. * Zero on sucess; a negated errno value on failure.
* *
****************************************************************************/ ****************************************************************************/
int pga11x_noop(PGA11X_HANDLE handle) #ifdef CONFIG_PGA11X_DAISYCHAIN
int pga11x_uread(PGA11X_HANDLE handle, int pos,
FAR struct pga11x_usettings_s *settings)
{ {
FAR struct spi_dev_s *spi = (FAR struct spi_dev_s *)handle; struct pga11x_settings_s both;
int ret = pga11x_read(handle, &both);
spivdbg("Entry\n"); if (ret == OK)
DEBUGASSERT(handle); {
if (pos == 0)
/* Lock the bus and send the NOOP command */ {
settings->channel = both.u1.channel;
pga11x_write(spi, PGA11X_CMA_NOOP); settings->gain = both.u1.gain;
return OK;
} }
else /* if (pos == 1) */
{
settings->channel = both.u2.channel;
settings->gain = both.u2.gain;
}
}
return ret;
}
#endif
/**************************************************************************** /****************************************************************************
* Name: pga11x_shutdown * Name: pga11x_shutdown
* *
* Description: * Description:
* Put the PGA11x in shutdown down mode. * Put all PGA11x's in shutdown down mode.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_shutdown() controls
* both chips in the daisy-chain. pga11x_ushutdown() is provided to
* control the parts independently.
* *
* Input Parameters: * Input Parameters:
* spi - An SPI "bottom half" device driver instance * spi - An SPI "bottom half" device driver instance
@ -540,17 +659,66 @@ int pga11x_shutdown(PGA11X_HANDLE handle)
spivdbg("Entry\n"); spivdbg("Entry\n");
DEBUGASSERT(handle); DEBUGASSERT(handle);
/* Lock the bus and enter shutdown mode by issuing an SDN_EN command */ /* Enter shutdown mode by issuing an SDN_EN command */
pga11x_write(spi, PGA11X_CMA_SDN_EN); #ifdef CONFIG_PGA11X_DAISYCHAIN
pga11x_write(spi, PGA11X_CMD_SDN_EN, PGA11X_DCCMD_SDN_EN);
#else
pga11x_write(spi, PGA11X_CMD_SDN_EN);
#endif
return OK; return OK;
} }
/****************************************************************************
* Name: pga11x_ushutdown
*
* Description:
* Put one PGA11x in shutdown down mode.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_ushutdown() is
* provided to shutdown the parts independently.
*
* Input Parameters:
* spi - An SPI "bottom half" device driver instance
* pos - Position of the chip in the daisy chain (0 or 1)
*
* Returned Value:
* Zero on sucess; a negated errno value on failure.
*
****************************************************************************/
#ifdef CONFIG_PGA11X_DAISYCHAIN
int pga11x_ushutdown(PGA11X_HANDLE handle, int pos)
{
FAR struct spi_dev_s *spi = (FAR struct spi_dev_s *)handle;
spivdbg("Entry\n");
DEBUGASSERT(handle);
/* Enter shutdown mode by issuing an SDN_EN command */
if (pos == 0)
{
pga11x_write(spi, PGA11X_CMD_SDN_EN, PGA11X_DCCMD_NOOP);
}
else
{
pga11x_write(spi, PGA11X_CMD_NOOP, PGA11X_DCCMD_SDN_EN);
}
return OK;
}
#endif
/**************************************************************************** /****************************************************************************
* Name: pga11x_enable * Name: pga11x_enable
* *
* Description: * Description:
* Take the PGA11x out of shutdown down mode. * Take all PGA11x's out of shutdown down mode.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_enable() controls
* both chips in the daisy-chain. pga11x_uenable() is provided to
* control the parts independently.
* *
* Input Parameters: * Input Parameters:
* spi - An SPI "bottom half" device driver instance * spi - An SPI "bottom half" device driver instance
@ -572,9 +740,54 @@ int pga11x_enable(PGA11X_HANDLE handle)
* command or by any valid Write command * command or by any valid Write command
*/ */
pga11x_write(spi, PGA11X_CMA_SDN_DIS); #ifdef CONFIG_PGA11X_DAISYCHAIN
pga11x_write(spi, PGA11X_CMD_SDN_DIS, PGA11X_DCCMD_SDN_DIS);
#else
pga11x_write(spi, PGA11X_CMD_SDN_DIS);
#endif
return OK; return OK;
} }
/****************************************************************************
* Name: pga11x_uenable
*
* Description:
* Take one PGA11x out of shutdown down mode.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_uenable() is
* provided to enable the parts independently.
*
* Input Parameters:
* spi - An SPI "bottom half" device driver instance
* pos - Position of the chip in the daisy chain (0 or 1)
*
* Returned Value:
* Zero on sucess; a negated errno value on failure.
*
****************************************************************************/
#ifdef CONFIG_PGA11X_DAISYCHAIN
int pga11x_uenable(PGA11X_HANDLE handle, int pos)
{
FAR struct spi_dev_s *spi = (FAR struct spi_dev_s *)handle;
spivdbg("Entry\n");
DEBUGASSERT(handle);
/* Enter shutdown mode by issuing an SDN_EN command */
if (pos == 0)
{
pga11x_write(spi, PGA11X_CMD_SDN_DIS, PGA11X_DCCMD_NOOP);
}
else
{
pga11x_write(spi, PGA11X_CMD_NOOP, PGA11X_DCCMD_SDN_DIS);
}
return OK;
}
#endif
#endif /* CONFIG_ADC && CONFIG_ADC_PGA11X */ #endif /* CONFIG_ADC && CONFIG_ADC_PGA11X */

View File

@ -132,39 +132,6 @@
#define PGA11X_CHAN_CAL3 (14) /* CAL3: connects to 0.1VCAL */ #define PGA11X_CHAN_CAL3 (14) /* CAL3: connects to 0.1VCAL */
#define PGA11X_CHAN_CAL4 (15) /* CAL4: connects to VREF */ #define PGA11X_CHAN_CAL4 (15) /* CAL4: connects to VREF */
/* These macros may be used to decode the value returned by pga11x_read() */
#define PGA11X_GAIN_SHIFT (4) /* B*/
#define PGA11X_GAIN_MASK (15 << PGA11X_GAIN_SHIFT)
/* Write command Mux Channel Selection Bits
*
* The PGA112/PGA113 have a two-channel input MUX; the PGA116/PGA117 have a
* 10-channel input MUX.
*/
#ifndef CONFIG_PGA11X_DAISYCHAIN
/* Bits 0-3: Channel Selection Bits
* Bits 4-7: Gain Selection Bits
*/
# define PGA11X_CHAN(value) ((uint16_t)value & 0x000f)
# define PGA11X_GAIN(value) (((uint16_t)value >> 4) & 0x000f)
#else
/* Bits 0-3: U1 Channel Selection Bits
* Bits 4-7: U1 Gain Selection Bits
* Bits 16-19: U2 Channel Selection Bits
* Bits 20-23: U2 Gain Selection Bits
*/
# define PGA11X_U1_CHAN(value) ((uint32_t)value & 0x0000000f)
# define PGA11X_U1_GAIN(value) (((uint32_t)value >> 4) & 0x0000000f)
# define PGA11X_U2_CHAN(value) (((uint32_t)value >> 16) & 0x0000000f)
# define PGA11X_U2_GAIN(value) (((uint32_t)value >> 20) & 0x0000000f)
#endif
/**************************************************************************** /****************************************************************************
* Public Types * Public Types
****************************************************************************/ ****************************************************************************/
@ -173,6 +140,42 @@
typedef FAR void *PGA11X_HANDLE; typedef FAR void *PGA11X_HANDLE;
/* Settings for one device in a daisy-chain */
#ifdef CONFIG_PGA11X_DAISYCHAIN
struct pga11x_usettings_s
{
uint8_t channel; /* See PGA11X_CHAN_* definitions */
uint8_t gain; /* See PGA11X_GAIN_* definitions */
};
#endif
/* These structures are used to encode gain and channel settings. This
* includes both devices in the case of a daisy-chained configuration.
* NOTE: This this logic is currently limited to only 2 devices in the
* daisy-chain.
*/
struct pga11x_settings_s
{
#ifndef CONFIG_PGA11X_DAISYCHAIN
uint8_t channel; /* See PGA11X_CHAN_* definitions */
uint8_t gain; /* See PGA11X_GAIN_* definitions */
#else
struct
{
uint8_t channel; /* See PGA11X_CHAN_* definitions */
uint8_t gain; /* See PGA11X_GAIN_* definitions */
} u1;
struct
{
uint8_t channel; /* See PGA11X_CHAN_* definitions */
uint8_t gain; /* See PGA11X_GAIN_* definitions */
} u2;
#endif
};
/**************************************************************************** /****************************************************************************
* Public Function Prototypes * Public Function Prototypes
****************************************************************************/ ****************************************************************************/
@ -188,7 +191,7 @@ extern "C" {
* Name: pga11x_initialize * Name: pga11x_initialize
* *
* Description: * Description:
* Initialize the PGA117 amplifier/multiplexer. * Initialize the PGA117 amplifier/multiplexer(s).
* *
* Input Parameters: * Input Parameters:
* spi - An SPI "bottom half" device driver instance * spi - An SPI "bottom half" device driver instance
@ -206,61 +209,103 @@ EXTERN PGA11X_HANDLE pga11x_initialize(FAR struct spi_dev_s *spi);
* Name: pga11x_select * Name: pga11x_select
* *
* Description: * Description:
* Select an input channel and gain. * Select an input channel and gain for all PGA11xs.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_select() configures
* both chips in the daisy-chain. pga11x_uselect() is provided to support
* configuring the parts in the daisychain independently.
* *
* Input Parameters: * Input Parameters:
* spi - An SPI "bottom half" device driver instance * spi - An SPI "bottom half" device driver instance
* channel - See the PGA11X_CHAN_* definitions above * settings - New channel and gain settings
* gain - See the PGA11X_GAIN_* definitions above
* *
* Returned Value: * Returned Value:
* Zero on sucess; a negated errno value on failure. * Zero on sucess; a negated errno value on failure.
* *
****************************************************************************/ ****************************************************************************/
EXTERN int pga11x_select(PGA11X_HANDLE handle, uint8_t channel, uint8_t gain); EXTERN int pga11x_select(PGA11X_HANDLE handle,
FAR const struct pga11x_settings_s *settings);
/****************************************************************************
* Name: pga11x_uselect
*
* Description:
* Select an input channel and gain for one PGA11x.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_uselect() configures
* one chips in the daisy-chain.
*
* Input Parameters:
* spi - An SPI "bottom half" device driver instance
* pos - Position of the chip in the daisy chain (0 or 1)
* settings - New channel and gain settings
*
* Returned Value:
* Zero on sucess; a negated errno value on failure.
*
****************************************************************************/
#ifdef CONFIG_PGA11X_DAISYCHAIN
EXTERN int pga11x_uselect(PGA11X_HANDLE handle, int pos,
FAR const struct pga11x_usettings_s *settings);
#endif
/**************************************************************************** /****************************************************************************
* Name: pga11x_read * Name: pga11x_read
* *
* Description: * Description:
* Read from the PGA117 amplifier/multiplexer. * Read from all PGA117 amplifier/multiplexers.
* *
* Input Parameters: * If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_read() reads from
* spi - An SPI "bottom half" device driver instance * both chips in the daisy-chain. pga11x_uread() is provided to support
* * accessing the parts independently.
* Returned Value:
* 16-bit value read from the device (32-bits in daisy chain mode)
*
****************************************************************************/
#ifdef CONFIG_PGA11X_DAISYCHAIN
EXTERN uint32_t pga11x_read(PGA11X_HANDLE handle);
#else
EXTERN uint16_t pga11x_read(PGA11X_HANDLE handle);
#endif
/****************************************************************************
* Name: pga11x_noop
*
* Description:
* Perform PGA11x no-operation.
* *
* Input Parameters: * Input Parameters:
* spi - An SPI "bottom half" device driver instance * spi - An SPI "bottom half" device driver instance
* settings - Returned channel and gain settings
* *
* Returned Value: * Returned Value:
* Zero on sucess; a negated errno value on failure. * Zero on sucess; a negated errno value on failure.
* *
****************************************************************************/ ****************************************************************************/
EXTERN int pga11x_noop(PGA11X_HANDLE handle); EXTERN int pga11x_read(PGA11X_HANDLE handle,
FAR struct pga11x_settings_s *settings);
/****************************************************************************
* Name: pga11x_uread
*
* Description:
* Read from one PGA117 amplifier/multiplexer.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_read() reads
* the parts independently.
*
* Input Parameters:
* spi - An SPI "bottom half" device driver instance
* pos - Position of the chip in the daisy chain (0 or 1)
* settings - Returned channel and gain settings
*
* Returned Value:
* Zero on sucess; a negated errno value on failure.
*
****************************************************************************/
#ifdef CONFIG_PGA11X_DAISYCHAIN
EXTERN int pga11x_uread(PGA11X_HANDLE handle, int pos,
FAR struct pga11x_usettings_s *settings);
#endif
/**************************************************************************** /****************************************************************************
* Name: pga11x_shutdown * Name: pga11x_shutdown
* *
* Description: * Description:
* Put the PGA11x in shutdown down mode. * Put all PGA11x;'s in shutdown down mode.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_shutdown() controls
* both chips in the daisy-chain. pga11x_ushutdown() is provided to
* control the parts independently.
* *
* Input Parameters: * Input Parameters:
* spi - An SPI "bottom half" device driver instance * spi - An SPI "bottom half" device driver instance
@ -272,11 +317,37 @@ EXTERN int pga11x_noop(PGA11X_HANDLE handle);
EXTERN int pga11x_shutdown(PGA11X_HANDLE handle); EXTERN int pga11x_shutdown(PGA11X_HANDLE handle);
/****************************************************************************
* Name: pga11x_ushutdown
*
* Description:
* Put one PGA11x in shutdown down mode.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_ushutdown() is
* provided to shutdown the parts independently.
*
* Input Parameters:
* spi - An SPI "bottom half" device driver instance
* pos - Position of the chip in the daisy chain (0 or 1)
*
* Returned Value:
* Zero on sucess; a negated errno value on failure.
*
****************************************************************************/
#ifdef CONFIG_PGA11X_DAISYCHAIN
EXTERN int pga11x_ushutdown(PGA11X_HANDLE handle, int pos);
#endif
/**************************************************************************** /****************************************************************************
* Name: pga11x_enable * Name: pga11x_enable
* *
* Description: * Description:
* Take the PGA11x out of shutdown down mode. * Take all PGA11x's out of shutdown down mode.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_enable() controls
* both chips in the daisy-chain. pga11x_uenable() is provided to
* control the parts independently.
* *
* Input Parameters: * Input Parameters:
* spi - An SPI "bottom half" device driver instance * spi - An SPI "bottom half" device driver instance
@ -288,6 +359,28 @@ EXTERN int pga11x_shutdown(PGA11X_HANDLE handle);
EXTERN int pga11x_enable(PGA11X_HANDLE handle); EXTERN int pga11x_enable(PGA11X_HANDLE handle);
/****************************************************************************
* Name: pga11x_uenable
*
* Description:
* Take one PGA11x out of shutdown down mode.
*
* If CONFIG_PGA11X_DAISYCHAIN is defined, then pga11x_uenable() is
* provided to enable the parts independently.
*
* Input Parameters:
* spi - An SPI "bottom half" device driver instance
* pos - Position of the chip in the daisy chain (0 or 1)
*
* Returned Value:
* Zero on sucess; a negated errno value on failure.
*
****************************************************************************/
#ifdef CONFIG_PGA11X_DAISYCHAIN
EXTERN int pga11x_uenable(PGA11X_HANDLE handle, int pos);
#endif
#undef EXTERN #undef EXTERN
#ifdef __cplusplus #ifdef __cplusplus
} }