Linux设备驱动剖析之SPI(三)
Linux设备驱动剖析之SPI(三)
spi_device *
u8 * };
N_SPI_MINORS 32 /* ... up to 256 */
DECLARE_BITMAP(minors, N_SPI_MINORS);
DECLARE_BITMAP(name,bits) \ name[BITS_TO_LONGS(bits)]
spidev_open( inode *inode, file * spidev_data * status = -
mutex_lock(&
list_for_each_entry(spidev, & (spidev->devt == inode-> status = (status == (!spidev-> spidev->buffer = (!spidev-> dev_dbg(&spidev->spi->dev, status = - (status == spidev->users++ filp->private_data = }
pr_debug(
mutex_unlock(& }
spidev_write( file *filp, __user * size_t count, loff_t * spidev_data * ssize_t status = unsigned
(count > -
spidev = filp->
mutex_lock(&spidev-> missing = copy_from_user(spidev-> (missing == status = }
status = - mutex_unlock(&spidev->
}
spidev_sync_write( spidev_data * spi_transfer t = .tx_buf = spidev-> .len =
spi_message_init(& spi_message_add_tail(&t, & spidev_sync(spidev, & }
* *
unsigned cs_change:
};
spi_device *
unsigned is_dma_mapped:
(*complete)( * *
* };
inline spi_message_init( spi_message * memset(m, , * INIT_LIST_HEAD(&m-> }
inline
spi_message_add_tail( spi_transfer *t, spi_message * list_add_tail(&t->transfer_list, &m-> }
spidev_sync( spidev_data *spidev, spi_message *
message->complete = message->context = &
spin_lock_irq(&spidev-> (spidev->spi == status = -
status = spi_async(spidev-> spin_unlock_irq(&spidev->
(status == wait_for_completion(& status = message-> (status == status = message-> }
spidev_complete( * }
spi_async( spi_device *spi, spi_message * spi_master *master = spi-> unsigned
spin_lock_irqsave(&master->
(master-> ret = -
ret =
spin_unlock_irqrestore(&master->
}
__spi_async( spi_device *spi, spi_message * spi_master *master = spi->
((master->flags & || (spi->mode & spi_transfer * unsigned flags = master->
list_for_each_entry(xfer, &message-> (xfer->rx_buf && xfer-> - ((flags & SPI_MASTER_NO_TX) && xfer-> - ((flags & SPI_MASTER_NO_RX) && xfer-> -
message->spi = message->status = - master-> }
s3c64xx_spi_transfer( spi_device * spi_message * s3c64xx_spi_driver_data * unsigned
sdd = spi_master_get_devdata(spi->
spin_lock_irqsave(&sdd->
(sdd->state & spin_unlock_irqrestore(&sdd-> -
msg->status = - msg->actual_length =
list_add_tail(&msg->queue, &sdd->
queue_work(sdd->workqueue, &sdd->
spin_unlock_irqrestore(&sdd->
}
评论暂时关闭