+++ /dev/null
-gpio-charger
-~~~~~~~~~~~~
-
-Required properties :
- - compatible : "gpio-charger"
- - gpio : A GPIO to be used by the gpio-charger driver.
- See bindings/gpio/gpio.txt for the GPIO specification format.
- - charger-type : power supply type.
- 0 = Unknown
- 1 = Battery
- 2 = UPS
- 3 = Mains
- 4 = USB standard downstream port
- 5 = USB dedicated charging port
- 6 = USB charging downstream port
- 7 = USB accessory charger adapter
-
-Example:
-
- charger {
- compatible = "gpio-charger";
- charger-type = <3>;
- gpio = <&gpf0 2 0 0 0>;
- }
POWER_SUPPLY_PROP_ONLINE,
};
-#if defined(CONFIG_OF)
-
-#include <linux/of_device.h>
-#include <linux/of_gpio.h>
-
-static const struct of_device_id gpio_charger_match[] = {
- { .compatible = "gpio-charger" },
- { }
-};
-MODULE_DEVICE_TABLE(of, gpio_charger_match);
-
-static void gpio_of_read_pdata(struct platform_device *pdev)
-{
- struct device_node *of_node = pdev->dev.of_node;
- struct gpio_charger_platform_data *pdata = pdev->dev.platform_data;
- enum of_gpio_flags flags;
- u32 prop;
-
- /* If platform data is already set, use it. */
- if (pdata)
- return;
-
- /* Verify this driver matches this device. */
- if (!of_node)
- return;
-
- /* Check for essential properties. */
- if (!of_get_property(of_node, "gpio", NULL))
- return;
-
- pdata = devm_kzalloc(&pdev->dev,
- sizeof(struct gpio_charger_platform_data),
- GFP_KERNEL);
- if (!pdata)
- return;
-
- pdata->name = "gpio-charger";
- pdata->type = POWER_SUPPLY_TYPE_UNKNOWN;
- if (!of_property_read_u32(of_node, "charger-type", &prop)) {
- switch (prop) {
- default:
- case 0:
- pdata->type = POWER_SUPPLY_TYPE_UNKNOWN;
- break;
- case 1:
- pdata->type = POWER_SUPPLY_TYPE_BATTERY;
- break;
- case 2:
- pdata->type = POWER_SUPPLY_TYPE_UPS;
- break;
- case 3:
- pdata->type = POWER_SUPPLY_TYPE_MAINS;
- break;
- case 4:
- pdata->type = POWER_SUPPLY_TYPE_USB;
- break;
- case 5:
- pdata->type = POWER_SUPPLY_TYPE_USB_DCP;
- break;
- case 6:
- pdata->type = POWER_SUPPLY_TYPE_USB_CDP;
- break;
- case 7:
- pdata->type = POWER_SUPPLY_TYPE_USB_ACA;
- break;
- }
- }
- pdata->gpio = of_get_named_gpio_flags(of_node, "gpio", 0, &flags);
- pdata->gpio_active_low = !!(flags & OF_GPIO_ACTIVE_LOW);
-
- pdev->dev.platform_data = pdata;
-}
-#else
-static inline void gpio_of_read_pdata(struct platform_device *pdev)
-{
-}
-#endif
-
static int __devinit gpio_charger_probe(struct platform_device *pdev)
{
- const struct gpio_charger_platform_data *pdata;
+ const struct gpio_charger_platform_data *pdata = pdev->dev.platform_data;
struct gpio_charger *gpio_charger;
struct power_supply *charger;
int ret;
int irq;
- if (!pdev->dev.platform_data)
- gpio_of_read_pdata(pdev);
-
- pdata = pdev->dev.platform_data;
if (!pdata) {
dev_err(&pdev->dev, "No platform data\n");
return -EINVAL;
.name = "gpio-charger",
.owner = THIS_MODULE,
.pm = &gpio_charger_pm_ops,
- .of_match_table = of_match_ptr(gpio_charger_match),
},
};