Merge remote-tracking branch 'spi/topic/doc' into spi-next
This commit is contained in:
Коммит
8c60348575
|
@ -123,6 +123,28 @@ SPI_STATISTICS_SHOW(bytes, "%llu");
|
|||
SPI_STATISTICS_SHOW(bytes_rx, "%llu");
|
||||
SPI_STATISTICS_SHOW(bytes_tx, "%llu");
|
||||
|
||||
#define SPI_STATISTICS_TRANSFER_BYTES_HISTO(index, number) \
|
||||
SPI_STATISTICS_SHOW_NAME(transfer_bytes_histo##index, \
|
||||
"transfer_bytes_histo_" number, \
|
||||
transfer_bytes_histo[index], "%lu")
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(0, "0-1");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(1, "2-3");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(2, "4-7");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(3, "8-15");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(4, "16-31");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(5, "32-63");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(6, "64-127");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(7, "128-255");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(8, "256-511");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(9, "512-1023");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(10, "1024-2047");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(11, "2048-4095");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(12, "4096-8191");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(13, "8192-16383");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(14, "16384-32767");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(15, "32768-65535");
|
||||
SPI_STATISTICS_TRANSFER_BYTES_HISTO(16, "65536+");
|
||||
|
||||
static struct attribute *spi_dev_attrs[] = {
|
||||
&dev_attr_modalias.attr,
|
||||
NULL,
|
||||
|
@ -143,6 +165,23 @@ static struct attribute *spi_device_statistics_attrs[] = {
|
|||
&dev_attr_spi_device_bytes.attr,
|
||||
&dev_attr_spi_device_bytes_rx.attr,
|
||||
&dev_attr_spi_device_bytes_tx.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo0.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo1.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo2.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo3.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo4.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo5.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo6.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo7.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo8.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo9.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo10.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo11.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo12.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo13.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo14.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo15.attr,
|
||||
&dev_attr_spi_device_transfer_bytes_histo16.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
@ -168,6 +207,23 @@ static struct attribute *spi_master_statistics_attrs[] = {
|
|||
&dev_attr_spi_master_bytes.attr,
|
||||
&dev_attr_spi_master_bytes_rx.attr,
|
||||
&dev_attr_spi_master_bytes_tx.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo0.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo1.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo2.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo3.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo4.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo5.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo6.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo7.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo8.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo9.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo10.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo11.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo12.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo13.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo14.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo15.attr,
|
||||
&dev_attr_spi_master_transfer_bytes_histo16.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
@ -186,10 +242,15 @@ void spi_statistics_add_transfer_stats(struct spi_statistics *stats,
|
|||
struct spi_master *master)
|
||||
{
|
||||
unsigned long flags;
|
||||
int l2len = min(fls(xfer->len), SPI_STATISTICS_HISTO_SIZE) - 1;
|
||||
|
||||
if (l2len < 0)
|
||||
l2len = 0;
|
||||
|
||||
spin_lock_irqsave(&stats->lock, flags);
|
||||
|
||||
stats->transfers++;
|
||||
stats->transfer_bytes_histo[l2len]++;
|
||||
|
||||
stats->bytes += xfer->len;
|
||||
if ((xfer->tx_buf) &&
|
||||
|
@ -317,6 +378,8 @@ static void spi_drv_shutdown(struct device *dev)
|
|||
* spi_register_driver - register a SPI driver
|
||||
* @sdrv: the driver to register
|
||||
* Context: can sleep
|
||||
*
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
int spi_register_driver(struct spi_driver *sdrv)
|
||||
{
|
||||
|
@ -368,7 +431,7 @@ static DEFINE_MUTEX(board_lock);
|
|||
* needs to discard the spi_device without adding it, then it should
|
||||
* call spi_dev_put() on it.
|
||||
*
|
||||
* Returns a pointer to the new device, or NULL.
|
||||
* Return: a pointer to the new device, or NULL.
|
||||
*/
|
||||
struct spi_device *spi_alloc_device(struct spi_master *master)
|
||||
{
|
||||
|
@ -427,7 +490,7 @@ static int spi_dev_check(struct device *dev, void *data)
|
|||
* Companion function to spi_alloc_device. Devices allocated with
|
||||
* spi_alloc_device can be added onto the spi bus with this function.
|
||||
*
|
||||
* Returns 0 on success; negative errno on failure
|
||||
* Return: 0 on success; negative errno on failure
|
||||
*/
|
||||
int spi_add_device(struct spi_device *spi)
|
||||
{
|
||||
|
@ -500,7 +563,7 @@ EXPORT_SYMBOL_GPL(spi_add_device);
|
|||
* this is exported so that for example a USB or parport based adapter
|
||||
* driver could add devices (which it would learn about out-of-band).
|
||||
*
|
||||
* Returns the new device, or NULL.
|
||||
* Return: the new device, or NULL.
|
||||
*/
|
||||
struct spi_device *spi_new_device(struct spi_master *master,
|
||||
struct spi_board_info *chip)
|
||||
|
@ -572,6 +635,8 @@ static void spi_match_master_to_boardinfo(struct spi_master *master,
|
|||
*
|
||||
* The board info passed can safely be __initdata ... but be careful of
|
||||
* any embedded pointers (platform_data, etc), they're copied as-is.
|
||||
*
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
int spi_register_board_info(struct spi_board_info const *info, unsigned n)
|
||||
{
|
||||
|
@ -1149,6 +1214,8 @@ static int spi_init_queue(struct spi_master *master)
|
|||
*
|
||||
* If there are more messages in the queue, the next message is returned from
|
||||
* this call.
|
||||
*
|
||||
* Return: the next message in the queue, else NULL if the queue is empty.
|
||||
*/
|
||||
struct spi_message *spi_get_next_queued_message(struct spi_master *master)
|
||||
{
|
||||
|
@ -1312,6 +1379,8 @@ static int __spi_queued_transfer(struct spi_device *spi,
|
|||
* spi_queued_transfer - transfer function for queued transfers
|
||||
* @spi: spi device which is requesting transfer
|
||||
* @msg: spi message which is to handled is queued to driver queue
|
||||
*
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
static int spi_queued_transfer(struct spi_device *spi, struct spi_message *msg)
|
||||
{
|
||||
|
@ -1611,12 +1680,13 @@ static struct class spi_master_class = {
|
|||
* only ones directly touching chip registers. It's how they allocate
|
||||
* an spi_master structure, prior to calling spi_register_master().
|
||||
*
|
||||
* This must be called from context that can sleep. It returns the SPI
|
||||
* master structure on success, else NULL.
|
||||
* This must be called from context that can sleep.
|
||||
*
|
||||
* The caller is responsible for assigning the bus number and initializing
|
||||
* the master's methods before calling spi_register_master(); and (after errors
|
||||
* adding the device) calling spi_master_put() to prevent a memory leak.
|
||||
*
|
||||
* Return: the SPI master structure on success, else NULL.
|
||||
*/
|
||||
struct spi_master *spi_alloc_master(struct device *dev, unsigned size)
|
||||
{
|
||||
|
@ -1700,6 +1770,8 @@ static int of_spi_register_master(struct spi_master *master)
|
|||
* success, else a negative error code (dropping the master's refcount).
|
||||
* After a successful return, the caller is responsible for calling
|
||||
* spi_unregister_master().
|
||||
*
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
int spi_register_master(struct spi_master *master)
|
||||
{
|
||||
|
@ -1793,6 +1865,8 @@ static void devm_spi_unregister(struct device *dev, void *res)
|
|||
*
|
||||
* Register a SPI device as with spi_register_master() which will
|
||||
* automatically be unregister
|
||||
*
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
int devm_spi_register_master(struct device *dev, struct spi_master *master)
|
||||
{
|
||||
|
@ -1898,6 +1972,8 @@ static int __spi_master_match(struct device *dev, const void *data)
|
|||
* arch init time. It returns a refcounted pointer to the relevant
|
||||
* spi_master (which the caller must release), or NULL if there is
|
||||
* no such master registered.
|
||||
*
|
||||
* Return: the SPI master structure on success, else NULL.
|
||||
*/
|
||||
struct spi_master *spi_busnum_to_master(u16 bus_num)
|
||||
{
|
||||
|
@ -1951,6 +2027,8 @@ static int __spi_validate_bits_per_word(struct spi_master *master, u8 bits_per_w
|
|||
* that the underlying controller or its driver does not support. For
|
||||
* example, not all hardware supports wire transfers using nine bit words,
|
||||
* LSB-first wire encoding, or active-high chipselects.
|
||||
*
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
int spi_setup(struct spi_device *spi)
|
||||
{
|
||||
|
@ -2169,6 +2247,8 @@ static int __spi_async(struct spi_device *spi, struct spi_message *message)
|
|||
* no other spi_message queued to that device will be processed.
|
||||
* (This rule applies equally to all the synchronous transfer calls,
|
||||
* which are wrappers around this core asynchronous primitive.)
|
||||
*
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
int spi_async(struct spi_device *spi, struct spi_message *message)
|
||||
{
|
||||
|
@ -2221,6 +2301,8 @@ EXPORT_SYMBOL_GPL(spi_async);
|
|||
* no other spi_message queued to that device will be processed.
|
||||
* (This rule applies equally to all the synchronous transfer calls,
|
||||
* which are wrappers around this core asynchronous primitive.)
|
||||
*
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
int spi_async_locked(struct spi_device *spi, struct spi_message *message)
|
||||
{
|
||||
|
@ -2336,7 +2418,7 @@ static int __spi_sync(struct spi_device *spi, struct spi_message *message,
|
|||
* Also, the caller is guaranteeing that the memory associated with the
|
||||
* message will not be freed before this call returns.
|
||||
*
|
||||
* It returns zero on success, else a negative error code.
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
int spi_sync(struct spi_device *spi, struct spi_message *message)
|
||||
{
|
||||
|
@ -2358,7 +2440,7 @@ EXPORT_SYMBOL_GPL(spi_sync);
|
|||
* SPI bus. It has to be preceded by a spi_bus_lock call. The SPI bus must
|
||||
* be released by a spi_bus_unlock call when the exclusive access is over.
|
||||
*
|
||||
* It returns zero on success, else a negative error code.
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
int spi_sync_locked(struct spi_device *spi, struct spi_message *message)
|
||||
{
|
||||
|
@ -2379,7 +2461,7 @@ EXPORT_SYMBOL_GPL(spi_sync_locked);
|
|||
* exclusive access is over. Data transfer must be done by spi_sync_locked
|
||||
* and spi_async_locked calls when the SPI bus lock is held.
|
||||
*
|
||||
* It returns zero on success, else a negative error code.
|
||||
* Return: always zero.
|
||||
*/
|
||||
int spi_bus_lock(struct spi_master *master)
|
||||
{
|
||||
|
@ -2408,7 +2490,7 @@ EXPORT_SYMBOL_GPL(spi_bus_lock);
|
|||
* This call releases an SPI bus lock previously obtained by an spi_bus_lock
|
||||
* call.
|
||||
*
|
||||
* It returns zero on success, else a negative error code.
|
||||
* Return: always zero.
|
||||
*/
|
||||
int spi_bus_unlock(struct spi_master *master)
|
||||
{
|
||||
|
@ -2443,6 +2525,8 @@ static u8 *buf;
|
|||
* portable code should never use this for more than 32 bytes.
|
||||
* Performance-sensitive or bulk transfer code should instead use
|
||||
* spi_{async,sync}() calls with dma-safe buffers.
|
||||
*
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
int spi_write_then_read(struct spi_device *spi,
|
||||
const void *txbuf, unsigned n_tx,
|
||||
|
|
|
@ -51,6 +51,8 @@ extern struct bus_type spi_bus_type;
|
|||
* @bytes_tx: number of bytes sent to device
|
||||
* @bytes_rx: number of bytes received from device
|
||||
*
|
||||
* @transfer_bytes_histo:
|
||||
* transfer bytes histogramm
|
||||
*/
|
||||
struct spi_statistics {
|
||||
spinlock_t lock; /* lock for the whole structure */
|
||||
|
@ -68,6 +70,8 @@ struct spi_statistics {
|
|||
unsigned long long bytes_rx;
|
||||
unsigned long long bytes_tx;
|
||||
|
||||
#define SPI_STATISTICS_HISTO_SIZE 17
|
||||
unsigned long transfer_bytes_histo[SPI_STATISTICS_HISTO_SIZE];
|
||||
};
|
||||
|
||||
void spi_statistics_add_transfer_stats(struct spi_statistics *stats,
|
||||
|
@ -843,8 +847,10 @@ extern int spi_bus_unlock(struct spi_master *master);
|
|||
* @len: data buffer size
|
||||
* Context: can sleep
|
||||
*
|
||||
* This writes the buffer and returns zero or a negative error code.
|
||||
* This function writes the buffer @buf.
|
||||
* Callable only from contexts that can sleep.
|
||||
*
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
static inline int
|
||||
spi_write(struct spi_device *spi, const void *buf, size_t len)
|
||||
|
@ -867,8 +873,10 @@ spi_write(struct spi_device *spi, const void *buf, size_t len)
|
|||
* @len: data buffer size
|
||||
* Context: can sleep
|
||||
*
|
||||
* This reads the buffer and returns zero or a negative error code.
|
||||
* This function reads the buffer @buf.
|
||||
* Callable only from contexts that can sleep.
|
||||
*
|
||||
* Return: zero on success, else a negative error code.
|
||||
*/
|
||||
static inline int
|
||||
spi_read(struct spi_device *spi, void *buf, size_t len)
|
||||
|
@ -895,7 +903,7 @@ spi_read(struct spi_device *spi, void *buf, size_t len)
|
|||
*
|
||||
* For more specific semantics see spi_sync().
|
||||
*
|
||||
* It returns zero on success, else a negative error code.
|
||||
* Return: Return: zero on success, else a negative error code.
|
||||
*/
|
||||
static inline int
|
||||
spi_sync_transfer(struct spi_device *spi, struct spi_transfer *xfers,
|
||||
|
@ -919,9 +927,10 @@ extern int spi_write_then_read(struct spi_device *spi,
|
|||
* @cmd: command to be written before data is read back
|
||||
* Context: can sleep
|
||||
*
|
||||
* This returns the (unsigned) eight bit number returned by the
|
||||
* device, or else a negative error code. Callable only from
|
||||
* contexts that can sleep.
|
||||
* Callable only from contexts that can sleep.
|
||||
*
|
||||
* Return: the (unsigned) eight bit number returned by the
|
||||
* device, or else a negative error code.
|
||||
*/
|
||||
static inline ssize_t spi_w8r8(struct spi_device *spi, u8 cmd)
|
||||
{
|
||||
|
@ -940,12 +949,13 @@ static inline ssize_t spi_w8r8(struct spi_device *spi, u8 cmd)
|
|||
* @cmd: command to be written before data is read back
|
||||
* Context: can sleep
|
||||
*
|
||||
* This returns the (unsigned) sixteen bit number returned by the
|
||||
* device, or else a negative error code. Callable only from
|
||||
* contexts that can sleep.
|
||||
*
|
||||
* The number is returned in wire-order, which is at least sometimes
|
||||
* big-endian.
|
||||
*
|
||||
* Callable only from contexts that can sleep.
|
||||
*
|
||||
* Return: the (unsigned) sixteen bit number returned by the
|
||||
* device, or else a negative error code.
|
||||
*/
|
||||
static inline ssize_t spi_w8r16(struct spi_device *spi, u8 cmd)
|
||||
{
|
||||
|
@ -964,13 +974,13 @@ static inline ssize_t spi_w8r16(struct spi_device *spi, u8 cmd)
|
|||
* @cmd: command to be written before data is read back
|
||||
* Context: can sleep
|
||||
*
|
||||
* This returns the (unsigned) sixteen bit number returned by the device in cpu
|
||||
* endianness, or else a negative error code. Callable only from contexts that
|
||||
* can sleep.
|
||||
*
|
||||
* This function is similar to spi_w8r16, with the exception that it will
|
||||
* convert the read 16 bit data word from big-endian to native endianness.
|
||||
*
|
||||
* Callable only from contexts that can sleep.
|
||||
*
|
||||
* Return: the (unsigned) sixteen bit number returned by the device in cpu
|
||||
* endianness, or else a negative error code.
|
||||
*/
|
||||
static inline ssize_t spi_w8r16be(struct spi_device *spi, u8 cmd)
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче