本文整理汇总了C++中spi_message_init函数的典型用法代码示例。如果您正苦于以下问题:C++ spi_message_init函数的具体用法?C++ spi_message_init怎么用?C++ spi_message_init使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了spi_message_init函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: cxd2880_spi_read_ts
static int cxd2880_spi_read_ts(struct spi_device *spi,
u8 *read_data,
u32 packet_num)
{
int ret;
u8 data[3];
struct spi_message message;
struct spi_transfer transfer[2] = {};
if (!spi || !read_data || !packet_num) {
pr_err("invalid arg\n");
return -EINVAL;
}
if (packet_num > 0xffff) {
pr_err("packet num > 0xffff\n");
return -EINVAL;
}
data[0] = 0x10;
data[1] = packet_num >> 8;
data[2] = packet_num;
spi_message_init(&message);
transfer[0].len = 3;
transfer[0].tx_buf = data;
spi_message_add_tail(&transfer[0], &message);
transfer[1].len = packet_num * 188;
transfer[1].rx_buf = read_data;
spi_message_add_tail(&transfer[1], &message);
ret = spi_sync(spi, &message);
if (ret)
pr_err("spi_write_then_read failed\n");
return ret;
}
示例2: smt113j_spi_cmd_init
static int smt113j_spi_cmd_init ( void )
{
int ret = 0;
ioctl_spi_internal_reg spi_command = { 0 };
struct spi_message m = {{ 0 }};
struct spi_transfer t[3] = {{ 0 }};
DEBUG_PRINT("smt113j_spi_cmd_init << Start >>");
/*** SPI message init ***/
spi_message_init ( &m );
/*** SPI command set ***/
spi_command.cmd = 0x01;
spi_command.data = 0xB1;
/*** transfer data set ***/
t[0].tx_buf = &spi_command;
t[0].rx_buf = NULL;
t[0].len = sizeof ( spi_command );
spi_message_add_tail ( &t[0], &m );
/*** SPI transfer request ***/
ret = spi_sync ( smt113j_spi_device, &m );
if ( 0 > ret )
{
ERROR_PRINT ("smt113j_spi_cmd_init : Sync Error << ret = %d >>", ret );
}
DEBUG_PRINT("smt113j_spi_cmd_init << End : %d >>", ret );
return ( ret );
}
示例3: adis16203_read_ring_data
/**
* adis16203_read_ring_data() read data registers which will be placed into ring
* @indio_dev: the IIO device
* @rx: somewhere to pass back the value read
**/
static int adis16203_read_ring_data(struct iio_dev *indio_dev, u8 *rx)
{
struct spi_message msg;
struct adis16203_state *st = iio_priv(indio_dev);
struct spi_transfer xfers[ADIS16203_OUTPUTS + 1];
int ret;
int i;
mutex_lock(&st->buf_lock);
spi_message_init(&msg);
memset(xfers, 0, sizeof(xfers));
for (i = 0; i <= ADIS16203_OUTPUTS; i++) {
xfers[i].bits_per_word = 8;
xfers[i].cs_change = 1;
xfers[i].len = 2;
xfers[i].delay_usecs = 20;
xfers[i].tx_buf = st->tx + 2 * i;
if (i < 1) /* SUPPLY_OUT: 0x02, AUX_ADC: 0x08 */
st->tx[2 * i] = ADIS16203_READ_REG(ADIS16203_SUPPLY_OUT + 2 * i);
else
st->tx[2 * i] = ADIS16203_READ_REG(ADIS16203_SUPPLY_OUT + 2 * i + 6);
st->tx[2 * i + 1] = 0;
if (i >= 1)
xfers[i].rx_buf = rx + 2 * (i - 1);
spi_message_add_tail(&xfers[i], &msg);
}
ret = spi_sync(st->us, &msg);
if (ret)
dev_err(&st->us->dev, "problem when burst reading");
mutex_unlock(&st->buf_lock);
return ret;
}
示例4: touch_spi_xfer
int touch_spi_xfer(struct spi_device *spi, struct touch_xfer_msg *xfer)
{
struct touch_xfer_data_t *tx = NULL;
struct touch_xfer_data_t *rx = NULL;
struct spi_transfer x[MAX_XFER_COUNT];
struct spi_message m;
int i = 0;
if (xfer->msg_count > MAX_XFER_COUNT) {
TOUCH_E("cout exceed\n");
return -1;
}
spi_message_init(&m);
memset(x, 0, sizeof(x));
for (i = 0; i < xfer->msg_count; i++) {
tx = &xfer->data[i].tx;
rx = &xfer->data[i].rx;
x[i].cs_change = 1;
x[i].bits_per_word = xfer->bits_per_word;
if (rx->size) {
x[i].tx_buf = tx->data;
x[i].rx_buf = rx->data;
x[i].len = rx->size;
} else {
x[i].tx_buf = tx->data;
x[i].rx_buf = NULL;
x[i].len = tx->size;
}
spi_message_add_tail(&x[i], &m);
}
return spi_sync(spi, &m);
}
示例5: epm_psoc_set_averaging
static int epm_psoc_set_averaging(struct epm_adc_drv *epm_adc,
struct epm_psoc_set_avg *psoc_set_avg)
{
struct spi_message m;
struct spi_transfer t;
char tx_buf[4], rx_buf[4];
int rc = 0;
spi_setup(epm_adc->epm_spi_client);
memset(&t, 0, sizeof t);
memset(tx_buf, 0, sizeof tx_buf);
memset(rx_buf, 0, sizeof tx_buf);
t.tx_buf = tx_buf;
t.rx_buf = rx_buf;
spi_message_init(&m);
spi_message_add_tail(&t, &m);
tx_buf[0] = psoc_set_avg->cmd;
tx_buf[1] = psoc_set_avg->avg_period;
t.len = sizeof(tx_buf);
t.bits_per_word = EPM_ADC_ADS_SPI_BITS_PER_WORD;
rc = spi_sync(epm_adc->epm_spi_client, &m);
if (rc)
return rc;
rc = spi_sync(epm_adc->epm_spi_client, &m);
if (rc)
return rc;
psoc_set_avg->cmd = rx_buf[0];
psoc_set_avg->return_code = rx_buf[1];
return rc;
}
示例6: corgi_ssp_lcdtg_send
static int corgi_ssp_lcdtg_send(struct corgi_lcd *lcd, int adrs, uint8_t data)
{
struct spi_message msg;
struct spi_transfer xfer = {
.len = 1,
.cs_change = 1,
.tx_buf = lcd->buf,
};
lcd->buf[0] = ((adrs & 0x07) << 5) | (data & 0x1f);
spi_message_init(&msg);
spi_message_add_tail(&xfer, &msg);
return spi_sync(lcd->spi_dev, &msg);
}
/* Set Phase Adjust */
static void lcdtg_set_phadadj(struct corgi_lcd *lcd, int mode)
{
int adj;
switch (mode) {
case CORGI_LCD_MODE_VGA:
/* Setting for VGA */
adj = sharpsl_param.phadadj;
adj = (adj < 0) ? PHACTRL_PHASE_MANUAL :
PHACTRL_PHASE_MANUAL | ((adj & 0xf) << 1);
break;
case CORGI_LCD_MODE_QVGA:
default:
/* Setting for QVGA */
adj = (DEFAULT_PHAD_QVGA << 1) | PHACTRL_PHASE_MANUAL;
break;
}
corgi_ssp_lcdtg_send(lcd, PHACTRL_ADRS, adj);
}
示例7: bu21150_write_register
static int bu21150_write_register(u32 addr, u16 size, u8 *data)
{
struct bu21150_data *ts = spi_get_drvdata(g_client_bu21150);
struct spi_device *client = ts->client;
struct ser_req *req;
int ret;
u8 *input;
input = kzalloc(sizeof(u8)*(size)+SPI_HEADER_SIZE, GFP_KERNEL);
req = kzalloc(sizeof(*req), GFP_KERNEL);
/* set header */
input[0] = 0x02; /* write command */
input[1] = (addr & 0xFF00) >> 8; /* address hi */
input[2] = (addr & 0x00FF) >> 0; /* address lo */
/* set data */
memcpy(input+SPI_HEADER_SIZE, data, size);
swap_2byte(input+SPI_HEADER_SIZE, size);
/* write data */
spi_message_init(&req->msg);
req->xfer[0].tx_buf = input;
req->xfer[0].rx_buf = NULL;
req->xfer[0].len = size+SPI_HEADER_SIZE;
req->xfer[0].cs_change = 0;
req->xfer[0].bits_per_word = SPI_BITS_PER_WORD_WRITE;
spi_message_add_tail(&req->xfer[0], &req->msg);
ret = spi_sync(client, &req->msg);
if (ret)
pr_err("%s : spi_sync read data error:ret=[%d]", __func__, ret);
kfree(req);
kfree(input);
return ret;
}
示例8: fc8050_spi_write_then_read
int fc8050_spi_write_then_read(struct spi_device *spi, fci_u8 *txbuf, fci_u16 tx_length, fci_u8 *rxbuf, fci_u16 rx_length)
{
fci_s32 res;
struct spi_message message;
struct spi_transfer x;
spi_message_init(&message);
memset(&x, 0, sizeof x);
spi_message_add_tail(&x, &message);
memcpy(tdata_buf, txbuf, tx_length);
x.tx_buf=tdata_buf;
x.rx_buf=rdata_buf;
x.len = tx_length + rx_length;
res = spi_sync(spi, &message);
memcpy(rxbuf, x.rx_buf + tx_length, rx_length);
return res;
}
示例9: linux_spi_write
int linux_spi_write(uint8_t *b, uint32_t len)
{
int ret;
struct spi_message msg;
if (len > 0 && NULL != b) {
struct spi_transfer tr = {
.tx_buf = b,
.len = len,
.speed_hz = SPEED,
.delay_usecs = 0,
};
char *r_buffer = kzalloc(len, GFP_KERNEL);
if (!r_buffer)
return 0; /* TODO: it should be return -ENOMEM */
tr.rx_buf = r_buffer;
PRINT_D(BUS_DBG, "Request writing %d bytes\n", len);
spi_message_init(&msg);
spi_message_add_tail(&tr, &msg);
ret = spi_sync(wilc_spi_dev, &msg);
if (ret < 0)
PRINT_ER("SPI transaction failed\n");
kfree(r_buffer);
} else {
PRINT_ER("can't write data due to NULL buffer or zero length\n");
ret = -1;
}
(ret < 0) ? (ret = 0) : (ret = 1);
return ret;
}
示例10: __nci_spi_send
static int __nci_spi_send(struct nci_spi *nspi, struct sk_buff *skb,
int cs_change)
{
struct spi_message m;
struct spi_transfer t;
memset(&t, 0, sizeof(struct spi_transfer));
/* a NULL skb means we just want the SPI chip select line to raise */
if (skb) {
t.tx_buf = skb->data;
t.len = skb->len;
} else {
/* still set tx_buf non NULL to make the driver happy */
t.tx_buf = &t;
t.len = 0;
}
t.cs_change = cs_change;
t.delay_usecs = nspi->xfer_udelay;
spi_message_init(&m);
spi_message_add_tail(&t, &m);
return spi_sync(nspi->spi, &m);
}
示例11: ili922x_read_status
/**
* ili922x_read_status - read status register from display
* @spi: spi device
* @rs: output value
*/
static int ili922x_read_status(struct spi_device *spi, u16 *rs)
{
struct spi_message msg;
struct spi_transfer xfer;
unsigned char tbuf[CMD_BUFSIZE];
unsigned char rbuf[CMD_BUFSIZE];
int ret, i;
memset(&xfer, 0, sizeof(struct spi_transfer));
spi_message_init(&msg);
xfer.tx_buf = tbuf;
xfer.rx_buf = rbuf;
xfer.cs_change = 1;
CHECK_FREQ_REG(spi, &xfer);
tbuf[0] = set_tx_byte(START_BYTE(ili922x_id, START_RS_INDEX,
START_RW_READ));
/*
* we need 4-byte xfer here due to invalid dummy byte
* received after start byte
*/
for (i = 1; i < 4; i++)
tbuf[i] = set_tx_byte(0); /* dummy */
xfer.bits_per_word = 8;
xfer.len = 4;
spi_message_add_tail(&xfer, &msg);
ret = spi_sync(spi, &msg);
if (ret < 0) {
dev_dbg(&spi->dev, "Error sending SPI message 0x%x", ret);
return ret;
}
*rs = (rbuf[2] << 8) + rbuf[3];
return 0;
}
示例12: kxr94_spi_write
int kxr94_spi_write( struct spi_device *spi_dev, unsigned char addr, unsigned char data )
{
unsigned char tx_buf[2]={addr, data};
struct spi_message msg;
struct spi_transfer transfer;
int retval;
/* Prepare the data. */
memset( &msg, 0, sizeof( msg ) );
memset( &transfer, 0, sizeof( transfer ) );
spi_message_init( &msg );
/* Prepare the address cycle. */
transfer.tx_buf=tx_buf;
transfer.len=sizeof( tx_buf );
transfer.delay_usecs=80;
spi_message_add_tail( &transfer, &msg );
/* Finalize and transmit. */
msg.spi=spi_dev;
msg.is_dma_mapped=0;
retval=spi_sync( spi_dev, &msg );
return retval;
}
示例13: max6902_get_reg
static int max6902_get_reg(struct device *dev, unsigned char address,
unsigned char *data)
{
struct spi_device *spi = to_spi_device(dev);
struct max6902 *chip = dev_get_drvdata(dev);
struct spi_message message;
struct spi_transfer xfer;
int status;
if (!data)
return -EINVAL;
/* Build our spi message */
spi_message_init(&message);
memset(&xfer, 0, sizeof(xfer));
xfer.len = 2;
/* Can tx_buf and rx_buf be equal? The doc in spi.h is not sure... */
xfer.tx_buf = chip->tx_buf;
xfer.rx_buf = chip->rx_buf;
/* Set MSB to indicate read */
chip->tx_buf[0] = address | 0x80;
spi_message_add_tail(&xfer, &message);
/* do the i/o */
status = spi_sync(spi, &message);
if (status == 0)
status = message.status;
else
return status;
*data = chip->rx_buf[1];
return status;
}
示例14: ab4500_read
int ab4500_read(struct ab4500 *ab4500, unsigned char block,
unsigned long addr)
{
struct spi_transfer xfer;
struct spi_message msg;
unsigned long spi_data =
1 << 23 | block << 18 | addr << 10;
mutex_lock(&ab4500->lock);
ab4500->tx_buf[0] = spi_data;
ab4500->rx_buf[0] = 0;
xfer.tx_buf = ab4500->tx_buf;
xfer.rx_buf = ab4500->rx_buf;
xfer.len = sizeof(unsigned long);
spi_message_init(&msg);
spi_message_add_tail(&xfer, &msg);
spi_sync(ab4500->spi, &msg);
mutex_unlock(&ab4500->lock);
return ab4500->rx_buf[0];
}
示例15: max3110_write_then_read
static int max3110_write_then_read(struct uart_max3110 *max,
const void *txbuf, void *rxbuf, unsigned len, int always_fast)
{
struct spi_device *spi = max->spi;
struct spi_message message;
struct spi_transfer x;
int ret;
spi_message_init(&message);
memset(&x, 0, sizeof x);
x.len = len;
x.tx_buf = txbuf;
x.rx_buf = rxbuf;
spi_message_add_tail(&x, &message);
if (always_fast)
x.speed_hz = spi->max_speed_hz;
else if (max->baud)
x.speed_hz = max->baud;
/* Do the i/o */
ret = spi_sync(spi, &message);
return ret;
}