RE: [PATCH] regulator: add VPMIC driver for NFC test

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sorry to sent a wrong set of patches.
Please ignore it.

Best Regards,
Neil Zhang


> -----Original Message-----
> From: Neil Zhang [mailto:zhangwm@xxxxxxxxxxx]
> Sent: 2012年5月3日 14:04
> To: haojian.zhuang@xxxxxxxxx; eric.y.miao@xxxxxxxxx
> Cc: Chao Xie; linux-usb@xxxxxxxxxxxxxxx; Neil Zhang
> Subject: [PATCH] regulator: add VPMIC driver for NFC test
> 
> Add a virtual PMIC in order to supply the regulators that pn544 needed.
> 
> Change-Id: I28ea959d760c8f264ce968df77b087d554140181
> Signed-off-by: Neil Zhang <zhangwm@xxxxxxxxxxx>
> ---
>  drivers/regulator/Kconfig       |    5 ++
>  drivers/regulator/Makefile      |    1 +
>  drivers/regulator/vpmic.c       |  135
> +++++++++++++++++++++++++++++++++++++++
>  include/linux/regulator/vpmic.h |   25 +++++++
>  4 files changed, 166 insertions(+), 0 deletions(-)
>  create mode 100644 drivers/regulator/vpmic.c
>  create mode 100644 include/linux/regulator/vpmic.h
> 
> diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
> index a4bf594..fed4440 100644
> --- a/drivers/regulator/Kconfig
> +++ b/drivers/regulator/Kconfig
> @@ -263,6 +263,11 @@ config REGULATOR_88PM8607
>  	help
>  	  This driver supports 88PM8607 voltage regulator chips.
> 
> +config REGULATOR_VPMIC
> +	bool "Marvell VPMIC Power regulators"
> +	help
> +	  This driver supports VPMIC voltage regulator, only for NFC test
> usage.
> +
>  config REGULATOR_88PM800
>         bool "Marvell 88PM800 Power regulators"
>         depends on MFD_88PM80X=y
> diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile
> index c4f4458..f7df62d 100644
> --- a/drivers/regulator/Makefile
> +++ b/drivers/regulator/Makefile
> @@ -39,6 +39,7 @@ obj-$(CONFIG_REGULATOR_TPS65023) += tps65023-
> regulator.o
>  obj-$(CONFIG_REGULATOR_TPS6507X) += tps6507x-regulator.o
>  obj-$(CONFIG_REGULATOR_TPS6524X) += tps6524x-regulator.o
>  obj-$(CONFIG_REGULATOR_88PM8607) += 88pm8607.o
> +obj-$(CONFIG_REGULATOR_VPMIC) += vpmic.o
>  obj-$(CONFIG_REGULATOR_88PM800) += 88pm800.o
>  obj-$(CONFIG_REGULATOR_ISL6271A) += isl6271a-regulator.o
>  obj-$(CONFIG_REGULATOR_AB8500)	+= ab8500.o
> diff --git a/drivers/regulator/vpmic.c b/drivers/regulator/vpmic.c
> new file mode 100644
> index 0000000..288841b
> --- /dev/null
> +++ b/drivers/regulator/vpmic.c
> @@ -0,0 +1,135 @@
> +/*
> + * Virtual Regulators driver for PN544
> + *
> + * Copyright (C) 2010 Marvell International Ltd.
> + *	Neil Zhang <zhangwm@xxxxxxxxxxx>
> + *
> + * This program is free software; you can redistribute it and/or
> modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +#include <linux/err.h>
> +#include <linux/platform_device.h>
> +#include <linux/regulator/driver.h>
> +#include <linux/regulator/machine.h>
> +
> +#include <linux/regulator/vpmic.h>
> +
> +
> +struct vpmic_regulator_info {
> +	struct regulator_desc	desc;
> +	struct regulator_dev	*regulator;
> +};
> +
> +
> +static int vpmic_enable(struct regulator_dev *rdev)
> +{
> +	struct vpmic_regulator_info *info = rdev_get_drvdata(rdev);
> +	dev_dbg(&rdev->dev, "vpmic_enable: %s\n", info->desc.name);
> +
> +	return 0;
> +}
> +
> +static int vpmic_disable(struct regulator_dev *rdev)
> +{
> +	struct vpmic_regulator_info *info = rdev_get_drvdata(rdev);
> +	dev_dbg(&rdev->dev, "vpmic_disable: %s\n", info->desc.name);
> +
> +	return 0;
> +}
> +
> +
> +static struct regulator_ops vpmic_regulator_ops = {
> +	.enable		= vpmic_enable,
> +	.disable	= vpmic_disable,
> +};
> +
> +
> +#define VPMIC_DVC(vreg)							\
> +{									\
> +	.desc	= {							\
> +		.name	= #vreg,					\
> +		.ops	= &vpmic_regulator_ops,				\
> +		.type	= REGULATOR_VOLTAGE,				\
> +		.id	= VPMIC_ID_##vreg,				\
> +		.owner	= THIS_MODULE,					\
> +	},								\
> +}
> +
> +
> +static struct vpmic_regulator_info vpmic_info[] = {
> +	VPMIC_DVC(Vdd_IO),
> +	VPMIC_DVC(VBat),
> +	VPMIC_DVC(VSim),
> +};
> +
> +
> +static int __devinit vpmic_regulator_probe(struct platform_device
> *pdev)
> +{
> +	struct vpmic_regulator_info *info = NULL;
> +	struct regulator_init_data *pdata = NULL;
> +	int i = 0;
> +
> +	pdata = pdev->dev.platform_data;
> +	if (pdata == NULL)
> +		return -EINVAL;
> +
> +	for (i = 0; i < ARRAY_SIZE(vpmic_info); i++) {
> +		info = &vpmic_info[i];
> +		if (!strcmp(info->desc.name, pdata->constraints.name))
> +			break;
> +	}
> +
> +	if (i >= ARRAY_SIZE(vpmic_info)) {
> +		dev_err(&pdev->dev, "Failed to find regulator %s\n",
> +			pdata->constraints.name);
> +		return -EINVAL;
> +	}
> +
> +	info->regulator = regulator_register(&info->desc, &pdev->dev,
> +						pdata, info);
> +	if (IS_ERR(info->regulator)) {
> +		dev_err(&pdev->dev, "failed to register regulator %s\n",
> +			info->desc.name);
> +		return PTR_ERR(info->regulator);
> +	}
> +
> +	platform_set_drvdata(pdev, info);
> +
> +	return 0;
> +}
> +
> +static int __devexit vpmic_regulator_remove(struct platform_device
> *pdev)
> +{
> +	struct vpmic_regulator_info *info = platform_get_drvdata(pdev);
> +
> +	platform_set_drvdata(pdev, NULL);
> +	regulator_unregister(info->regulator);
> +	return 0;
> +}
> +
> +static struct platform_driver vpmic_regulator_driver = {
> +	.driver		= {
> +		.name	= "vpmic-regulator",
> +		.owner	= THIS_MODULE,
> +	},
> +	.probe		= vpmic_regulator_probe,
> +	.remove		= __devexit_p(vpmic_regulator_remove),
> +};
> +
> +static int __init vpmic_regulator_init(void)
> +{
> +	return platform_driver_register(&vpmic_regulator_driver);
> +}
> +subsys_initcall(vpmic_regulator_init);
> +
> +static void __exit vpmic_regulator_exit(void)
> +{
> +	platform_driver_unregister(&vpmic_regulator_driver);
> +}
> +module_exit(vpmic_regulator_exit);
> +
> +MODULE_LICENSE("GPL");
> +MODULE_DESCRIPTION("Regulator Driver for Marvell Virtual PMIC");
> diff --git a/include/linux/regulator/vpmic.h
> b/include/linux/regulator/vpmic.h
> new file mode 100644
> index 0000000..0e8e5bf
> --- /dev/null
> +++ b/include/linux/regulator/vpmic.h
> @@ -0,0 +1,25 @@
> +/*
> + * Marvell vpmic Interface
> + *
> + * Copyright (C) 2010 Marvell International Ltd.
> + *	Neil Zhang <zhangwm@xxxxxxxxxxx>
> + *
> + * This program is free software; you can redistribute it and/or
> modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +
> +#ifndef __VPMIC_H
> +#define __VPMIC_H
> +
> +
> +enum {
> +	VPMIC_ID_Vdd_IO = 0,
> +	VPMIC_ID_VBat,
> +	VPMIC_ID_VSim,
> +	VPMIC_ID_RG_MAX,
> +};
> +
> +
> +#endif
> --
> 1.7.4.1

?韬{.n?????%??檩??w?{.n???{炳???骅w*jg????????G??⒏⒎?:+v????????????"??????


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux