/*! * This function is called whenever the SPI slave device is detected. * * @param spi the SPI slave device * * @return Returns 0 on SUCCESS and error on FAILURE. */ static int __devinit pmic_probe(struct spi_device *spi) { int ret = 0; if (!strcmp(spi->dev.bus_id, PMIC_ARBITRATION)) { if (PMIC_SUCCESS != pmic_fix_arbitration(spi)) { dev_err((struct device *)spi, "Unable to fix arbitration!! Access Failed\n"); return -EACCES; } return PMIC_SUCCESS; } /* Initialize the PMIC parameters */ ret = pmic_spi_setup(spi); if (ret != PMIC_SUCCESS) { return PMIC_ERROR; } /* Initialize the PMIC event handling */ pmic_event_list_init(); /* Initialize GPIO for PMIC Interrupt */ gpio_pmic_active(); /* Get the PMIC Version */ pmic_get_revision(&mxc_pmic_version); if (mxc_pmic_version.revision < 0) { dev_err((struct device *)spi, "PMIC not detected!!! Access Failed\n"); return -ENODEV; } else { dev_dbg((struct device *)spi, "Detected pmic core IC version number is %d\n", mxc_pmic_version.revision); } /* Initialize the PMIC parameters */ ret = pmic_init_registers(); if (ret != PMIC_SUCCESS) { return PMIC_ERROR; } /* Set and install PMIC IRQ handler */ set_irq_type(spi->irq, IRQF_TRIGGER_RISING); ret = request_irq(spi->irq, pmic_irq_handler, 0, "PMIC_IRQ", 0); if (ret) { dev_err((struct device *)spi, "gpio1: irq%d error.", spi->irq); return ret; } power_ldm.dev.platform_data = spi->dev.platform_data; pmic_pdev_register(); printk(KERN_INFO "Device %s probed\n", spi->dev.bus_id); return PMIC_SUCCESS; }
/*! * This function is called whenever the SPI slave device is detected. * * @param spi the SPI slave device * * @return Returns 0 on SUCCESS and error on FAILURE. */ static int __devinit pmic_probe(struct spi_device *spi) { int ret = 0; struct pmic_platform_data *plat_data = spi->dev.platform_data; /* Initialize the PMIC parameters */ ret = pmic_spi_setup(spi); if (ret != PMIC_SUCCESS) { return PMIC_ERROR; } /* Initialize the PMIC event handling */ pmic_event_list_init(); /* Initialize GPIO for PMIC Interrupt */ gpio_pmic_active(); /* Get the PMIC Version */ pmic_get_revision(&mxc_pmic_version); if (mxc_pmic_version.revision < 0) { dev_err((struct device *)spi, "PMIC not detected!!! Access Failed\n"); return -ENODEV; } else { dev_dbg((struct device *)spi, "Detected pmic core IC version number is %d\n", mxc_pmic_version.revision); } spi_set_drvdata(spi, pmic_alloc_data(&(spi->dev))); /* Initialize the PMIC parameters */ ret = pmic_init_registers(); if (ret != PMIC_SUCCESS) { kfree(spi_get_drvdata(spi)); spi_set_drvdata(spi, NULL); return PMIC_ERROR; } ret = pmic_start_event_thread(spi->irq); if (ret) { pr_err("mc13892 pmic driver init: \ fail to start event thread\n"); kfree(spi_get_drvdata(spi)); spi_set_drvdata(spi, NULL); return PMIC_ERROR; } /* Set and install PMIC IRQ handler */ set_irq_type(spi->irq, IRQF_TRIGGER_HIGH); ret = request_irq(spi->irq, pmic_irq_handler, 0, "PMIC_IRQ", 0); if (ret) { kfree(spi_get_drvdata(spi)); spi_set_drvdata(spi, NULL); dev_err((struct device *)spi, "gpio1: irq%d error.", spi->irq); return ret; } enable_irq_wake(spi->irq); if (plat_data && plat_data->init) { ret = plat_data->init(spi_get_drvdata(spi)); if (ret != 0) { kfree(spi_get_drvdata(spi)); spi_set_drvdata(spi, NULL); return PMIC_ERROR; } } power_ldm.dev.platform_data = spi->dev.platform_data; pmic_pdev_register(); printk(KERN_INFO "Device %s probed\n", dev_name(&spi->dev)); return PMIC_SUCCESS; }
/*! * This function is called whenever the SPI slave device is detected. * * @param spi the SPI slave device * * @return Returns 0 on SUCCESS and error on FAILURE. */ static int __devinit pmic_probe(struct spi_device *spi) { int ret = 0; struct pmic_platform_data *plat_data = spi->dev.platform_data; const char *name; int pmic_index; /* Initialize the PMIC parameters */ ret = pmic_spi_setup(spi); if (ret != PMIC_SUCCESS) { return PMIC_ERROR; } name = get_chipname(spi); if (!name) return PMIC_ERROR; pmic_index = get_index_pmic_internal(name); if (pmic_index == PMIC_ID_INVALID) return PMIC_ERROR; pmic_spi_adc_ldm.name = get_client_device_name(name, "%s_adc"); pmic_spi_battery_ldm.name = get_client_device_name(name, "%s_battery"); pmic_spi_light_ldm.name = get_client_device_name(name, "%s_light"); pmic_spi_rtc_ldm.name = get_client_device_name(name, "%s_rtc"); //wen add //pmic_spi_rleds_ldm.name = get_client_device_name(name,"%s_leds"); //pmic_spi_gleds_ldm.name = get_client_device_name(name,"%s_leds"); //pmic_spi_bleds_ldm.name = get_client_device_name(name,"%s_leds"); //printk("%s %s %d adc_ldm.name =%s\n",__FILE__,__func__,__LINE__,pmic_spi_adc_ldm.name); //printk("%s %s %d battery_ldm.name =%s\n",__FILE__,__func__,__LINE__,pmic_spi_battery_ldm.name); //printk("%s %s %d light_ldm.name =%s\n",__FILE__,__func__,__LINE__,pmic_spi_light_ldm.name); //printk("%s %s %d rtc_ldm.name =%s\n",__FILE__,__func__,__LINE__,pmic_spi_rtc_ldm.name); //printk("%s %s %d pmic_spi_rleds_ldm.name =%s\n",__FILE__,__func__,__LINE__,pmic_spi_rleds_ldm.name); //printk("%s %s %d pmic_spi_gleds_ldm.name =%s\n",__FILE__,__func__,__LINE__,pmic_spi_gleds_ldm.name); //printk("%s %s %d pmic_spi_bleds_ldm.name =%s\n",__FILE__,__func__,__LINE__,pmic_spi_bleds_ldm.name); /* Initialize the PMIC event handling */ pmic_event_list_init(); /* Initialize GPIO for PMIC Interrupt */ gpio_pmic_active(); /* Get the PMIC Version */ pmic_internal[pmic_index].pmic_get_revision(&mxc_pmic_version); if (mxc_pmic_version.revision < 0) { dev_err((struct device *)spi, "PMIC not detected!!! Access Failed\n"); return -ENODEV; } else { dev_dbg((struct device *)spi, "Detected pmic core IC version number is %d\n", mxc_pmic_version.revision); } spi_set_drvdata(spi, pmic_internal[pmic_index].pmic_alloc_data(&(spi->dev))); /* Initialize the PMIC parameters */ ret = pmic_internal[pmic_index].pmic_init_registers(); if (ret != PMIC_SUCCESS) { kfree(spi_get_drvdata(spi)); spi_set_drvdata(spi, NULL); return PMIC_ERROR; } ret = pmic_start_event_thread(spi->irq); if (ret) { pr_err("pmic driver init: \ fail to start event thread\n"); kfree(spi_get_drvdata(spi)); spi_set_drvdata(spi, NULL); return PMIC_ERROR; } /* Set and install PMIC IRQ handler */ set_irq_type(spi->irq, IRQF_TRIGGER_HIGH); ret = request_irq(spi->irq, pmic_irq_handler, 0, "PMIC_IRQ", 0); if (ret) { kfree(spi_get_drvdata(spi)); spi_set_drvdata(spi, NULL); dev_err((struct device *)spi, "gpio1: irq%d error.", spi->irq); return ret; } enable_irq_wake(spi->irq); if (plat_data && plat_data->init) { ret = plat_data->init(spi_get_drvdata(spi)); if (ret != 0) { kfree(spi_get_drvdata(spi)); spi_set_drvdata(spi, NULL); return PMIC_ERROR; } } pmic_spi_power_ldm.dev.platform_data = spi->dev.platform_data; pmic_pdev_register(); printk(KERN_INFO "Device %s probed\n", dev_name(&spi->dev)); return PMIC_SUCCESS; }