/* Called when the module is loaded.  This function starts the
 * cascade of calls up through the heirarchy of i2c modules (i.e. up to the
 *  algorithm layer and into to the core layer)
 */
static int __init iic_avalanche_init(void)
{

	struct iic_avalanche *piic = &iic_avalanche_priv_data;

	DEB2(printk(KERN_INFO "Initialize Avalanche IIC adapter module\n"));




        iic_avalanche_priv_data.iic_clock = avalanche_get_vbus_freq(); /* Clock frequency on the peripheral bus */ 

	iic_avalanche_data.data = (void *)piic;
	init_waitqueue_head(&iic_wait);
	if (iic_hw_resrc_init() == 0) {

                DEB2(printk("calling add bus\n"));

		if (i2c_avalanche_add_bus(&iic_avalanche_ops) < 0)
			return -ENODEV;
	} else {
		return -ENODEV;
	}
	DEB2(printk(KERN_INFO " found device at %#x irq %d.\n",
		piic->iic_base, piic->iic_irq));
	return 0;
}
Exemple #2
0
/* Called when the module is loaded.  This function starts the
 * cascade of calls up through the hierarchy of i2c modules (i.e. up to the
 *  algorithm layer and into to the core layer)
 */
static int __init iic_ite_init(void) 
{

	struct iic_ite *piic = &gpi;

	printk(KERN_INFO "Initialize ITE IIC adapter module\n");
	if (base == 0)
		piic->iic_base = DEFAULT_BASE;
	else
		piic->iic_base = base;

	if (irq == 0)
		piic->iic_irq = DEFAULT_IRQ;
	else
		piic->iic_irq = irq;

	if (clock == 0)
		piic->iic_clock = DEFAULT_CLOCK;
	else
		piic->iic_clock = clock;

	if (own == 0)
		piic->iic_own = DEFAULT_OWN;
	else
		piic->iic_own = own;

	iic_ite_data.data = (void *)piic;
	init_waitqueue_head(&iic_wait);
	spin_lock_init(&lock);
	if (iic_hw_resrc_init() == 0) {
		if (i2c_iic_add_bus(&iic_ite_ops) < 0)
			return -ENODEV;
	} else {
		return -ENODEV;
	}
	printk(KERN_INFO " found device at %#x irq %d.\n", 
		piic->iic_base, piic->iic_irq);
	return 0;
}
//
// Description: Called when the module is loaded.  This function starts the
// cascade of calls up through the heirarchy of i2c modules (i.e. up to the
//  algorithm layer and into to the core layer)
//
static int __init iic_ibmocp_init(void) 
{
   int i;

   printk(KERN_INFO "iic_ibmocp_init: IBM on-chip iic adapter module\n");
 
   for(i=0; i<IIC_NUMS; i++) {
      iic_ibmocp_data[i] = kmalloc(sizeof(struct i2c_algo_iic_data),GFP_KERNEL);
      if(iic_ibmocp_data[i] == NULL) {
         return -ENOMEM;
      }
      memset(iic_ibmocp_data[i], 0, sizeof(struct i2c_algo_iic_data));
      
      switch (i) {
	      case 0:
	       iic_ibmocp_adaps[i]->iic_irq = IIC_IRQ(0);
	      break;
	      case 1:
	       iic_ibmocp_adaps[i]->iic_irq = IIC_IRQ(1);
	      break;
      }
      iic_ibmocp_adaps[i]->iic_clock = IIC_CLOCK;
      iic_ibmocp_adaps[i]->iic_own = IIC_OWN; 
      iic_ibmocp_adaps[i]->index = i;
 
      DEB(printk("irq %x\n", iic_ibmocp_adaps[i]->iic_irq));
      DEB(printk("clock %x\n", iic_ibmocp_adaps[i]->iic_clock));
      DEB(printk("own %x\n", iic_ibmocp_adaps[i]->iic_own));
      DEB(printk("index %x\n", iic_ibmocp_adaps[i]->index));


      iic_ibmocp_data[i]->data = (struct iic_regs *)iic_ibmocp_adaps[i]; 
      iic_ibmocp_data[i]->setiic = iic_ibmocp_setbyte;
      iic_ibmocp_data[i]->getiic = iic_ibmocp_getbyte;
      iic_ibmocp_data[i]->getown = iic_ibmocp_getown;
      iic_ibmocp_data[i]->getclock = iic_ibmocp_getclock;
      iic_ibmocp_data[i]->waitforpin = iic_ibmocp_waitforpin;
      iic_ibmocp_data[i]->udelay = 80;
      iic_ibmocp_data[i]->mdelay = 80;
      iic_ibmocp_data[i]->timeout = HZ;
      
            iic_ibmocp_ops[i] = kmalloc(sizeof(struct i2c_adapter), GFP_KERNEL);
      if(iic_ibmocp_ops[i] == NULL) {
         return -ENOMEM;
      }
      memset(iic_ibmocp_ops[i], 0, sizeof(struct i2c_adapter));
      strcpy(iic_ibmocp_ops[i]->name, "IBM OCP IIC adapter");
      iic_ibmocp_ops[i]->owner = THIS_MODULE;
      iic_ibmocp_ops[i]->id = I2C_HW_OCP;
      iic_ibmocp_ops[i]->algo = NULL;
      iic_ibmocp_ops[i]->algo_data = iic_ibmocp_data[i];
       
      
      init_waitqueue_head(&(iic_wait[i]));
      if (iic_hw_resrc_init(i) == 0) {
         if (i2c_ocp_add_bus(iic_ibmocp_ops[i]) < 0)
         return -ENODEV;
      } else {
         return -ENODEV;
      }
      DEB(printk(KERN_INFO "iic_ibmocp_init: found device at %#x.\n\n", iic_ibmocp_adaps[i]->iic_base));
   }
   return 0;
}