/* 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; }
/* 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; }