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-> 
       }

 

相关内容