コード例 #1
0
static int __init psoc4_cdrv_init(void)
{
    int err;
    
    printk("psoc4 driver initializing\n");
    
    /* Register SPI Driver */
    err=psoc4_spi_init();
    if(err)
        ERRGOTO(error, "Failed SPI Initialization\n");
    
    /* Allocate chrdev region */
    devno = MKDEV(psoc4_MAJOR, psoc4_MINOR);
    err = register_chrdev_region(devno, psoc4_DEVICE, "psoc4");
    if(err)
        ERRGOTO(err_spi_init, "Failed registering char region (%d,%d) +%d, error %d\n",
                psoc4_MAJOR, psoc4_MINOR, psoc4_DEVICE, err);
    
    /* Register Char Device */
    cdev_init(&psoc4Dev, &psoc4_Fops);
    err = cdev_add(&psoc4Dev, devno, psoc4_DEVICE);
    if (err)
        ERRGOTO(err_register, "Error %d adding psoc4 device\n", err);
    
    return 0;
    
err_register:
    unregister_chrdev_region(devno, psoc4_DEVICE);
    
err_spi_init:
    psoc4_spi_exit();
    
error:
    return err;
}
コード例 #2
0
/* Kernel Module Initialize method. This is run when inserting the module into the kernel */
static int __init candygun_cdrv_init(void)
{
  int err; 
  
  printk("candygun driver initializing\n");  

  /* Register SPI Driver */
  err=candygun_spi_init();
  if(err)
    ERRGOTO(error, "Failed SPI Initialization\n");
  
  /* Allocate chrdev region */
  if(alloc_chrdev_region(&devno, 0, NUM_OF_MINORS, "my_Spi_Device") < 0)
  {
    printk(KERN_DEBUG"Failed to allocate major and minor number");

    ERRGOTO(err_spi_init, "Failed registering char region error %d\n", err);
  }
  
  /* Register Char Device */
  cdev_init(&candygunDev, &candygun_Fops);
  candygunDev.owner = THIS_MODULE;
  err = cdev_add(&candygunDev, devno, 1);
  if (err != 0)
  {
    printk(KERN_ALERT "Failed to add cdev...\n");
    ERRGOTO(err_register, "Error %d adding candy gun device\n", err);
  }

  /* Create class */
  my_SPI_Device = class_create(THIS_MODULE, "my_SPI_Device");
  if(my_SPI_Device == NULL)
  {
    printk(KERN_DEBUG"Failed to create class...\n");
    ERRGOTO(err_spi_init, "Failed registering char region error %d\n", err);
  }    

  /* Create device */
  candygun = device_create(my_SPI_Device, NULL, devno, NULL, "candygun");
  if(IS_ERR(candygun))
  {
    printk(KERN_DEBUG"Failed to create device...\n");
    ERRGOTO(err_spi_init, "Failed registering char region error %d\n", err);
  }
 
  return 0;
  
  /* Error Handling Region */
  err_register:
  unregister_chrdev_region(devno, NUM_OF_MINORS);

  err_spi_init:
  candygun_spi_exit();
  
  error:
  return err;
}
コード例 #3
0
ファイル: ads7870.c プロジェクト: CasperHeller/MPS_Exercise8
static int __init ads7870_cdrv_init(void)
{
  int err; 
  
  printk("ads7870 driver initializing\n");  

  err=ads7870_spi_init();
  if(err)
    ERRGOTO(error, "Failed SPI Initialization\n");

  
  /* Allocate chrdev region */
  devno = MKDEV(ADS7870_MAJOR, ADS7870_MINOR);
  err = register_chrdev_region(devno, NBR_ADC_CH, "ads7870");  
  if(err)
    ERRGOTO(err_spi_init, "Failed registering char region (%d,%d) +%d, error %d\n",
            ADS7870_MAJOR, ADS7870_MINOR, NBR_ADC_CH, err);
  
  /* Register Char Device */
  cdev_init(&ads7870Dev, &ads7870_Fops);
  err = cdev_add(&ads7870Dev, devno, NBR_ADC_CH);
  if (err)
    ERRGOTO(err_register, "Error %d adding ADS7870 device\n", err);


  
  /* Configure ADS7870 according to data sheet */
  ads7870_spi_write_reg8(ADS7870_REFOSC, 
                         ADS7870_REFOSC_OSCR |
                         ADS7870_REFOSC_OSCE |
                         ADS7870_REFOSC_REFE |
                         ADS7870_REFOSC_BUFE |
                         ADS7870_REFOSC_R2V);
  
  return 0;
  
  err_register:
  unregister_chrdev_region(devno, NBR_ADC_CH);

  err_spi_init:
  ads7870_spi_exit();
  
  
  error:
  return err;
}