add some glue code between the idt82 driver and at91lib SPI
This commit is contained in:
parent
638afbb89b
commit
605e3e459f
|
@ -3,6 +3,24 @@
|
|||
#include "idt82v2081.h"
|
||||
#include "idt82v2081_regs.h"
|
||||
|
||||
/*! \brief Set or clear some (masked) bits inside a register
|
||||
* \param[in] e4k reference to the tuner
|
||||
* \param[in] reg number of the register
|
||||
* \param[in] mask bit-mask of the value
|
||||
* \param[in] val data value to be written to register
|
||||
* \returns 0 on success, negative in case of error
|
||||
*/
|
||||
static int idt82_reg_set_bit_mask(struct idt82 *idt, uint8_t reg,
|
||||
uint8_t mask, uint8_t val)
|
||||
{
|
||||
uint8_t tmp = idt82_reg_read(idt, reg);
|
||||
|
||||
if ((tmp & mask) == val)
|
||||
return 0;
|
||||
|
||||
return idt82_reg_write(idt, reg, (tmp & ~mask) | (val & mask));
|
||||
}
|
||||
|
||||
int idt82_termination(struct idt82 *idt, enum idt82_term term)
|
||||
{
|
||||
idt82_reg_set_bit_mask(IDT_REG_TERM, term | (term << IDT_TERM_T_SHIFT),
|
||||
|
|
|
@ -18,6 +18,8 @@ enum idt82_mode {
|
|||
struct idt82 {
|
||||
enum idt82_mode mode;
|
||||
enum idt82_term term;
|
||||
void *priv;
|
||||
uint8_t cs;
|
||||
};
|
||||
|
||||
int idt82_termination(struct idt82 *idt, enum idt82_term term);
|
||||
|
@ -30,4 +32,8 @@ int idt82_init(struct idt82 *idt);
|
|||
int idt82_reg_write(struct idt82 *idt, uint8_t reg, uin8_t val);
|
||||
int idt82_reg_read(struct idt82 *idt, uint8_t reg);
|
||||
|
||||
/* board specific initializers */
|
||||
int idt82_at91_init(struct idt82 *idt, void *spi, unsigned int id,
|
||||
uint8_t cs, uint32_t spi_mr, uint32_t csr);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#include <spi/spi.h>
|
||||
|
||||
#include "idt82v2081.h"
|
||||
|
||||
/* Adaption layer between idt82 driver and at91lib SPI driver */
|
||||
|
||||
#define B_READ (1 << 5)
|
||||
|
||||
/* backend function for core idt82 driver */
|
||||
int idt82_reg_read(struct idt82 *idt, uint8_t reg)
|
||||
{
|
||||
uint16_t res;
|
||||
|
||||
SPI_Write(idt->priv, idt->cs, (reg & 0x1F) | B_READ);
|
||||
while (!SPI_IsFinished(idt->priv));
|
||||
res = SPI_Read(idt->priv, idt->cs);
|
||||
|
||||
return res >> 8;
|
||||
}
|
||||
/* backend function for core idt82 driver */
|
||||
int idt82_reg_write(struct idt82 *idt, uint8_t reg, uint8_t val)
|
||||
{
|
||||
SPI_Write(idt->priv, idt->cs, (reg & 0x1F) | B_READ | (val << 8));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* initialize the SPI interface to the IDT82 */
|
||||
int idt82_at91_init(struct idt82 *idt, void *spi, unsigned int id,
|
||||
uint8_t cs, uint32_t spi_mr, uint32_t csr)
|
||||
{
|
||||
idt->priv = spi;
|
||||
|
||||
SPI_Configure(spi, id, spi_mr);
|
||||
SPI_ConfigureNCPS(spi, cs, csr);
|
||||
SPI_Enable(spi);
|
||||
}
|
Loading…
Reference in New Issue