static int __devinit pm8058_charger_probe(struct platform_device *pdev)
{
    struct pm8058_chip *pm_chip;

    pm_chip = platform_get_drvdata(pdev);
    if (pm_chip == NULL) {
        pr_err("%s:no parent data passed in.\n", __func__);
        return -EFAULT;
    }

    pm8058_chg.pm_chip = pm_chip;
    pm8058_chg.pdata = pdev->dev.platform_data;
    pm8058_chg.dev = &pdev->dev;

    if (request_irqs(pdev)) {
        pr_err("%s: couldnt register interrupts\n", __func__);
        return -EINVAL;
    }

    if (pm8058_usb_voltage_lower_limit()) {
        pr_err("%s: couldnt write to IGNORE_LL\n", __func__);
        return -EINVAL;
    }

    return 0;
}
Example #2
0
ssize_t dev_open(struct inode *inode,struct file *filp)
{
	int ret = nonseekable_open(inode,filp);
	if(ret < 0)
	{
		return ret;
	}
	init_gpio();
	ret = request_irqs();
	if(ret < 0)
	{
		return ret;
	}
	init_devbuffer();
	return ret;
}
Example #3
0
static int __init sbc2410_buttons_init(void)
{
	int ret;

	ready = 0;
	ret = register_chrdev(BUTTON_MAJOR, DEVICE_NAME, &sbc2410_buttons_fops);
	if (ret < 0) {
	  printk(DEVICE_NAME " can't register major number\n");
	  return ret;
	}
	
	ret = request_irqs();
	if (ret) {
		unregister_chrdev(BUTTON_MAJOR, DEVICE_NAME);
		printk(DEVICE_NAME " can't request irqs\n");
		return ret;
	}
	devfs_handle = devfs_register(NULL, DEVICE_NAME, DEVFS_FL_DEFAULT,
				BUTTON_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR, &sbc2410_buttons_fops, NULL);

	return 0;
}
static int __devinit pm8058_charger_probe(struct platform_device *pdev)
{
	int ret;	
	struct pm8058_charger_platform_data *pdata;
	struct msm_hardware_charger *pchg;

	pdata = pdev->dev.platform_data;

	if(!pdata) {
		pr_err("%s: no platform_data passed in. \n", __func__);
		return -EFAULT;
	}

	pchg = kzalloc(sizeof *pchg, GFP_KERNEL);
	if (pchg == NULL) {
		pr_err("%s kzalloc failed\n", __func__);
		return -ENOMEM;
	}

	pchg->chg_detection_config = pdata->chg_detection_config;
	pchg->get_charger_status = pdata->get_charger_status;
	pchg->pdev = pdev;
	pchg->gpio_num = pdata->gpio_num;
	pchg->rating = pdata->rating;

	pchg->charger.name = pdata->name;
	if(pdata->rating == 2) {
		pchg->charger.type = POWER_SUPPLY_TYPE_MAINS;
	} else if(pdata->rating == 1) {
		pchg->charger.type = POWER_SUPPLY_TYPE_USB;
	} else {
		goto error_type;
	}

	pchg->charger.supplied_to = msm_power_supplied_to;
	pchg->charger.num_supplicants = ARRAY_SIZE(msm_power_supplied_to);
	pchg->charger.properties = msm_power_props;
	pchg->charger.num_properties = ARRAY_SIZE(msm_power_props);
	pchg->charger.get_property = charger_get_property_s7pro;

//
//#ifdef CONFIG_HAS_EARLYSUSPEND
//	pchg->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
//	pchg->early_suspend.suspend = s7pro_charger_early_suspend;
//	pchg->early_suspend.resume = s7pro_charger_late_resume;
//	register_early_suspend(&pchg->early_suspend);
//#endif
//

	dev_set_drvdata(&pdev->dev, pchg);

	if(pchg->chg_detection_config(1, pchg->gpio_num)) {
		pr_err("%s, init config fail. \n", __func__);
		goto error_type;
	}

	ret = request_irqs(pchg);
	if (ret) {
		pr_err("%s: couldnt register interrupts\n", __func__);
		goto error_type;
	}

	ret = msm_charger_register(pchg);
	if(ret) {
		pr_err("%s register charger failed ret=%d\n",
			__func__, ret);
		goto register_fail;
	}

	/* determine what state the charger is in */
	pm8058_chg_determine_initial_state(pchg);

	return 0;
	
register_fail:
	free_irqs(pchg);
error_type:
	kfree(pchg);
	return -EFAULT;
 
}