From: Lars-Peter Clausen <lars@metafoo.de>
To: Anton Vorontsov <cbouatmailru@gmail.com>
Cc: linux-mips@linux-mips.org, linux-kernel@vger.kernel.org,
Ralf Baechle <ralf@linux-mips.org>
Subject: Re: [PATCH v2 24/26] power: Add JZ4740 battery driver.
Date: Sun, 27 Jun 2010 03:58:52 +0200 [thread overview]
Message-ID: <4C26B05C.3030706@metafoo.de> (raw)
In-Reply-To: <1276924111-11158-25-git-send-email-lars@metafoo.de>
Hi Anton
You already said that v1 of the patch looked good to you. There are some minor
modifications in v2 due to code re-factoring of the ADC driver. If you think this
version is good as well an Acked-By would be nice :)
Thanks
- Lars
Lars-Peter Clausen wrote:
> This patch adds support for the battery voltage measurement part of the JZ4740
> ADC unit.
>
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> Cc: Anton Vorontsov <cbouatmailru@gmail.com>
>
> ---
> Changes since v1
> - Fix voltage difference check in jz_update_battery
> - Move get_battery_voltage from the hwmon driver to the battery driver
> - The battery driver is now a cell of the ADC MFD driver
> ---
> drivers/power/Kconfig | 11 +
> drivers/power/Makefile | 1 +
> drivers/power/jz4740-battery.c | 445 ++++++++++++++++++++++++++++++++++
> include/linux/power/jz4740-battery.h | 24 ++
> 4 files changed, 481 insertions(+), 0 deletions(-)
> create mode 100644 drivers/power/jz4740-battery.c
> create mode 100644 include/linux/power/jz4740-battery.h
>
> diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
> index 8e9ba17..1e5506b 100644
> --- a/drivers/power/Kconfig
> +++ b/drivers/power/Kconfig
> @@ -142,4 +142,15 @@ config CHARGER_PCF50633
> help
> Say Y to include support for NXP PCF50633 Main Battery Charger.
>
> +config BATTERY_JZ4740
> + tristate "Ingenic JZ4740 battery"
> + depends on MACH_JZ4740
> + depends on MFD_JZ4740_ADC
> + help
> + Say Y to enable support for the battery on Ingenic JZ4740 based
> + boards.
> +
> + This driver can be build as a module. If so, the module will be
> + called jz4740-battery.
> +
> endif # POWER_SUPPLY
> diff --git a/drivers/power/Makefile b/drivers/power/Makefile
> index 0005080..cf95009 100644
> --- a/drivers/power/Makefile
> +++ b/drivers/power/Makefile
> @@ -34,3 +34,4 @@ obj-$(CONFIG_BATTERY_DA9030) += da9030_battery.o
> obj-$(CONFIG_BATTERY_MAX17040) += max17040_battery.o
> obj-$(CONFIG_BATTERY_Z2) += z2_battery.o
> obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o
> +obj-$(CONFIG_BATTERY_JZ4740) += jz4740-battery.o
> diff --git a/drivers/power/jz4740-battery.c b/drivers/power/jz4740-battery.c
> new file mode 100644
> index 0000000..20c4b95
> --- /dev/null
> +++ b/drivers/power/jz4740-battery.c
> @@ -0,0 +1,445 @@
> +/*
> + * Battery measurement code for Ingenic JZ SOC.
> + *
> + * Copyright (C) 2009 Jiejing Zhang <kzjeef@gmail.com>
> + * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
> + *
> + * based on tosa_battery.c
> + *
> + * Copyright (C) 2008 Marek Vasut <marek.vasut@gmail.com>
> +*
> + * 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/interrupt.h>
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/platform_device.h>
> +#include <linux/slab.h>
> +
> +#include <linux/delay.h>
> +#include <linux/gpio.h>
> +#include <linux/mfd/core.h>
> +#include <linux/power_supply.h>
> +
> +#include <linux/power/jz4740-battery.h>
> +#include <linux/jz4740-adc.h>
> +
> +struct jz_battery {
> + struct jz_battery_platform_data *pdata;
> + struct platform_device *pdev;
> +
> + struct resource *mem;
> + void __iomem *base;
> +
> + int irq;
> + int charge_irq;
> +
> + struct mfd_cell *cell;
> +
> + int status;
> + long voltage;
> +
> + struct completion read_completion;
> +
> + struct power_supply battery;
> + struct delayed_work work;
> +};
> +
> +static inline struct jz_battery *psy_to_jz_battery(struct power_supply *psy)
> +{
> + return container_of(psy, struct jz_battery, battery);
> +}
> +
> +static irqreturn_t jz_battery_irq_handler(int irq, void *devid)
> +{
> + struct jz_battery *battery = devid;
> +
> + complete(&battery->read_completion);
> + return IRQ_HANDLED;
> +}
> +
> +static long jz_battery_read_voltage(struct jz_battery *battery)
> +{
> + unsigned long t;
> + unsigned long val;
> + long voltage;
> +
> + INIT_COMPLETION(battery->read_completion);
> +
> + enable_irq(battery->irq);
> + battery->cell->enable(battery->pdev);
> +
> + t = wait_for_completion_interruptible_timeout(&battery->read_completion,
> + HZ);
> +
> + if (t > 0) {
> + val = readw(battery->base) & 0xfff;
> +
> + if (battery->pdata->info.voltage_max_design <= 2500000)
> + val = (val * 78125UL) >> 7UL;
> + else
> + val = ((val * 924375UL) >> 9UL) + 33000;
> + voltage = (long)val;
> + } else {
> + voltage = t ? t : -ETIMEDOUT;
> + }
> +
> + battery->cell->disable(battery->pdev);
> + disable_irq(battery->irq);
> +
> + return voltage;
> +}
> +
> +static int jz_battery_get_capacity(struct power_supply *psy)
> +{
> + struct jz_battery *jz_battery = psy_to_jz_battery(psy);
> + struct power_supply_info *info = &jz_battery->pdata->info;
> + long voltage;
> + int ret;
> + int voltage_span;
> +
> + voltage = jz_battery_read_voltage(jz_battery);
> +
> + if (voltage < 0)
> + return voltage;
> +
> + voltage_span = info->voltage_max_design - info->voltage_min_design;
> + ret = ((voltage - info->voltage_min_design) * 100) / voltage_span;
> +
> + if (ret > 100)
> + ret = 100;
> + else if (ret < 0)
> + ret = 0;
> +
> + return ret;
> +}
> +
> +static int jz_battery_get_property(struct power_supply *psy,
> + enum power_supply_property psp, union power_supply_propval *val)
> +{
> + struct jz_battery *jz_battery = psy_to_jz_battery(psy);
> + struct power_supply_info *info = &jz_battery->pdata->info;
> + long voltage;
> +
> + switch (psp) {
> + case POWER_SUPPLY_PROP_STATUS:
> + val->intval = jz_battery->status;
> + break;
> + case POWER_SUPPLY_PROP_TECHNOLOGY:
> + val->intval = jz_battery->pdata->info.technology;
> + break;
> + case POWER_SUPPLY_PROP_HEALTH:
> + voltage = jz_battery_read_voltage(jz_battery);
> + if (voltage < info->voltage_min_design)
> + val->intval = POWER_SUPPLY_HEALTH_DEAD;
> + else
> + val->intval = POWER_SUPPLY_HEALTH_GOOD;
> + break;
> + case POWER_SUPPLY_PROP_CAPACITY:
> + val->intval = jz_battery_get_capacity(psy);
> + break;
> + case POWER_SUPPLY_PROP_VOLTAGE_NOW:
> + val->intval = jz_battery_read_voltage(jz_battery);
> + if (val->intval < 0)
> + return val->intval;
> + break;
> + case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
> + val->intval = info->voltage_max_design;
> + break;
> + case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
> + val->intval = info->voltage_min_design;
> + break;
> + case POWER_SUPPLY_PROP_PRESENT:
> + val->intval = 1;
> + break;
> + default:
> + return -EINVAL;
> + }
> + return 0;
> +}
> +
> +static void jz_battery_external_power_changed(struct power_supply *psy)
> +{
> + struct jz_battery *jz_battery = psy_to_jz_battery(psy);
> +
> + cancel_delayed_work(&jz_battery->work);
> + schedule_delayed_work(&jz_battery->work, 0);
> +}
> +
> +static irqreturn_t jz_battery_charge_irq(int irq, void *data)
> +{
> + struct jz_battery *jz_battery = data;
> +
> + cancel_delayed_work(&jz_battery->work);
> + schedule_delayed_work(&jz_battery->work, 0);
> +
> + return IRQ_HANDLED;
> +}
> +
> +static void jz_battery_update(struct jz_battery *jz_battery)
> +{
> + int status;
> + long voltage;
> + bool has_changed = false;
> + int is_charging;
> +
> + if (gpio_is_valid(jz_battery->pdata->gpio_charge)) {
> + is_charging = gpio_get_value(jz_battery->pdata->gpio_charge);
> + is_charging ^= jz_battery->pdata->gpio_charge_active_low;
> + if (is_charging)
> + status = POWER_SUPPLY_STATUS_CHARGING;
> + else
> + status = POWER_SUPPLY_STATUS_NOT_CHARGING;
> +
> + if (status != jz_battery->status) {
> + jz_battery->status = status;
> + has_changed = true;
> + }
> + }
> +
> + voltage = jz_battery_read_voltage(jz_battery);
> + if (abs(voltage - jz_battery->voltage) < 50000) {
> + jz_battery->voltage = voltage;
> + has_changed = true;
> + }
> +
> + if (has_changed)
> + power_supply_changed(&jz_battery->battery);
> +}
> +
> +static enum power_supply_property jz_battery_properties[] = {
> + POWER_SUPPLY_PROP_STATUS,
> + POWER_SUPPLY_PROP_TECHNOLOGY,
> + POWER_SUPPLY_PROP_HEALTH,
> + POWER_SUPPLY_PROP_CAPACITY,
> + POWER_SUPPLY_PROP_VOLTAGE_NOW,
> + POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
> + POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
> + POWER_SUPPLY_PROP_PRESENT,
> +};
> +
> +static void jz_battery_work(struct work_struct *work)
> +{
> + /* Too small interval will increase system workload */
> + const int interval = HZ * 30;
> + struct jz_battery *jz_battery = container_of(work, struct jz_battery,
> + work.work);
> +
> + jz_battery_update(jz_battery);
> + schedule_delayed_work(&jz_battery->work, interval);
> +}
> +
> +static int __devinit jz_battery_probe(struct platform_device *pdev)
> +{
> + int ret = 0;
> + struct jz_battery_platform_data *pdata = pdev->dev.parent->platform_data;
> + struct jz_battery *jz_battery;
> + struct power_supply *battery;
> +
> + jz_battery = kzalloc(sizeof(*jz_battery), GFP_KERNEL);
> + if (!jz_battery) {
> + dev_err(&pdev->dev, "Failed to allocate driver structure\n");
> + return -ENOMEM;
> + }
> +
> + jz_battery->cell = pdev->dev.platform_data;
> +
> + jz_battery->irq = platform_get_irq(pdev, 0);
> + if (jz_battery->irq < 0) {
> + ret = jz_battery->irq;
> + dev_err(&pdev->dev, "Failed to get platform irq: %d\n", ret);
> + goto err_free;
> + }
> +
> + jz_battery->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + if (!jz_battery->mem) {
> + ret = -ENOENT;
> + dev_err(&pdev->dev, "Failed to get platform mmio resource\n");
> + goto err_free;
> + }
> +
> + jz_battery->mem = request_mem_region(jz_battery->mem->start,
> + resource_size(jz_battery->mem), pdev->name);
> + if (!jz_battery->mem) {
> + ret = -EBUSY;
> + dev_err(&pdev->dev, "Failed to request mmio memory region\n");
> + goto err_free;
> + }
> +
> + jz_battery->base = ioremap_nocache(jz_battery->mem->start,
> + resource_size(jz_battery->mem));
> + if (!jz_battery->base) {
> + ret = -EBUSY;
> + dev_err(&pdev->dev, "Failed to ioremap mmio memory\n");
> + goto err_release_mem_region;
> + }
> +
> + battery = &jz_battery->battery;
> + battery->name = pdata->info.name;
> + battery->type = POWER_SUPPLY_TYPE_BATTERY;
> + battery->properties = jz_battery_properties;
> + battery->num_properties = ARRAY_SIZE(jz_battery_properties);
> + battery->get_property = jz_battery_get_property;
> + battery->external_power_changed = jz_battery_external_power_changed;
> + battery->use_for_apm = 1;
> +
> + jz_battery->pdata = pdata;
> + jz_battery->pdev = pdev;
> +
> + init_completion(&jz_battery->read_completion);
> +
> + INIT_DELAYED_WORK(&jz_battery->work, jz_battery_work);
> +
> + ret = request_irq(jz_battery->irq, jz_battery_irq_handler, 0, pdev->name,
> + jz_battery);
> + if (ret) {
> + dev_err(&pdev->dev, "Failed to request irq %d\n", ret);
> + goto err_iounmap;
> + }
> + disable_irq(jz_battery->irq);
> +
> + if (gpio_is_valid(pdata->gpio_charge)) {
> + ret = gpio_request(pdata->gpio_charge, dev_name(&pdev->dev));
> + if (ret) {
> + dev_err(&pdev->dev, "charger state gpio request failed.\n");
> + goto err_free_irq;
> + }
> + ret = gpio_direction_input(pdata->gpio_charge);
> + if (ret) {
> + dev_err(&pdev->dev, "charger state gpio set direction failed.\n");
> + goto err_free_gpio;
> + }
> +
> + jz_battery->charge_irq = gpio_to_irq(pdata->gpio_charge);
> +
> + if (jz_battery->charge_irq >= 0) {
> + ret = request_irq(jz_battery->charge_irq,
> + jz_battery_charge_irq,
> + IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
> + dev_name(&pdev->dev), jz_battery);
> + if (ret) {
> + dev_err(&pdev->dev, "Failed to request charge irq: %d\n", ret);
> + goto err_free_gpio;
> + }
> + }
> + } else {
> + jz_battery->charge_irq = -1;
> + }
> +
> + if (jz_battery->pdata->info.voltage_max_design <= 2500000)
> + jz4740_adc_set_config(pdev->dev.parent, JZ_ADC_CONFIG_BAT_MB,
> + JZ_ADC_CONFIG_BAT_MB);
> + else
> + jz4740_adc_set_config(pdev->dev.parent, JZ_ADC_CONFIG_BAT_MB, 0);
> +
> + ret = power_supply_register(&pdev->dev, &jz_battery->battery);
> + if (ret) {
> + dev_err(&pdev->dev, "power supply battery register failed.\n");
> + goto err_free_charge_irq;
> + }
> +
> + platform_set_drvdata(pdev, jz_battery);
> + schedule_delayed_work(&jz_battery->work, 0);
> +
> + return 0;
> +
> +err_free_charge_irq:
> + if (jz_battery->charge_irq >= 0)
> + free_irq(jz_battery->charge_irq, jz_battery);
> +err_free_gpio:
> + if (gpio_is_valid(pdata->gpio_charge))
> + gpio_free(jz_battery->pdata->gpio_charge);
> +err_free_irq:
> + free_irq(jz_battery->irq, jz_battery);
> +err_iounmap:
> + platform_set_drvdata(pdev, NULL);
> + iounmap(jz_battery->base);
> +err_release_mem_region:
> + release_mem_region(jz_battery->mem->start, resource_size(jz_battery->mem));
> +err_free:
> + kfree(jz_battery);
> + return ret;
> +}
> +
> +static int __devexit jz_battery_remove(struct platform_device *pdev)
> +{
> + struct jz_battery *jz_battery = platform_get_drvdata(pdev);
> +
> + cancel_delayed_work_sync(&jz_battery->work);
> +
> + if (gpio_is_valid(jz_battery->pdata->gpio_charge)) {
> + if (jz_battery->charge_irq >= 0)
> + free_irq(jz_battery->charge_irq, jz_battery);
> + gpio_free(jz_battery->pdata->gpio_charge);
> + }
> +
> + power_supply_unregister(&jz_battery->battery);
> +
> + free_irq(jz_battery->irq, jz_battery);
> +
> + iounmap(jz_battery->base);
> + release_mem_region(jz_battery->mem->start, resource_size(jz_battery->mem));
> +
> + return 0;
> +}
> +
> +#ifdef CONFIG_PM
> +static int jz_battery_suspend(struct device *dev)
> +{
> + struct jz_battery *jz_battery = dev_get_drvdata(dev);
> +
> + cancel_delayed_work_sync(&jz_battery->work);
> + jz_battery->status = POWER_SUPPLY_STATUS_UNKNOWN;
> +
> + return 0;
> +}
> +
> +static int jz_battery_resume(struct device *dev)
> +{
> + struct jz_battery *jz_battery = dev_get_drvdata(dev);
> +
> + schedule_delayed_work(&jz_battery->work, 0);
> +
> + return 0;
> +}
> +
> +static const struct dev_pm_ops jz_battery_pm_ops = {
> + .suspend = jz_battery_suspend,
> + .resume = jz_battery_resume,
> +};
> +
> +#define JZ_BATTERY_PM_OPS (&jz_battery_pm_ops)
> +#else
> +#define JZ_BATTERY_PM_OPS NULL
> +#endif
> +
> +static struct platform_driver jz_battery_driver = {
> + .probe = jz_battery_probe,
> + .remove = __devexit_p(jz_battery_remove),
> + .driver = {
> + .name = "jz4740-battery",
> + .owner = THIS_MODULE,
> + .pm = JZ_BATTERY_PM_OPS,
> + },
> +};
> +
> +static int __init jz_battery_init(void)
> +{
> + return platform_driver_register(&jz_battery_driver);
> +}
> +module_init(jz_battery_init);
> +
> +static void __exit jz_battery_exit(void)
> +{
> + platform_driver_unregister(&jz_battery_driver);
> +}
> +module_exit(jz_battery_exit);
> +
> +MODULE_ALIAS("platform:jz4740-battery");
> +MODULE_LICENSE("GPL");
> +MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
> +MODULE_DESCRIPTION("JZ4740 SoC battery driver");
> diff --git a/include/linux/power/jz4740-battery.h b/include/linux/power/jz4740-battery.h
> new file mode 100644
> index 0000000..19c9610
> --- /dev/null
> +++ b/include/linux/power/jz4740-battery.h
> @@ -0,0 +1,24 @@
> +/*
> + * Copyright (C) 2009, Jiejing Zhang <kzjeef@gmail.com>
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU General Public License as published by the
> + * Free Software Foundation; either version 2 of the License, or (at your
> + * option) any later version.
> + *
> + * You should have received a copy of the GNU General Public License along
> + * with this program; if not, write to the Free Software Foundation, Inc.,
> + * 675 Mass Ave, Cambridge, MA 02139, USA.
> + *
> + */
> +
> +#ifndef __JZ4740_BATTERY_H
> +#define __JZ4740_BATTERY_H
> +
> +struct jz_battery_platform_data {
> + struct power_supply_info info;
> + int gpio_charge; /* GPIO port of Charger state */
> + int gpio_charge_active_low;
> +};
> +
> +#endif
next prev parent reply other threads:[~2010-06-27 1:59 UTC|newest]
Thread overview: 163+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-19 5:08 [PATCH v2 00/26] Add support for the Ingenic JZ4740 System-on-a-Chip Lars-Peter Clausen
2010-06-19 5:08 ` [lm-sensors] [PATCH v2 00/26] Add support for the Ingenic JZ4740 Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 00/26] Add support for the Ingenic JZ4740 System-on-a-Chip Lars-Peter Clausen
2010-06-19 5:08 ` Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 01/26] MIPS: Add base support for " Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 02/26] MIPS: jz4740: Add IRQ handler code Lars-Peter Clausen
2010-07-17 12:08 ` [PATCH v3] " Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 03/26] MIPS: JZ4740: Add clock API support Lars-Peter Clausen
2010-06-28 1:24 ` [PATCH v3 " Lars-Peter Clausen
2010-07-17 12:10 ` [PATCH v4] " Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 04/26] MIPS: JZ4740: Add timer support Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 05/26] MIPS: JZ4740: Add clocksource/clockevent support Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 06/26] MIPS: JZ4740: Add power-management and system reset support Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 07/26] MIPS: JZ4740: Add setup code Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 08/26] MIPS: JZ4740: Add gpio support Lars-Peter Clausen
2010-07-17 12:11 ` [PATCH v3] " Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 09/26] MIPS: JZ4740: Add DMA support Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 10/26] MIPS: JZ4740: Add PWM support Lars-Peter Clausen
2010-06-28 1:23 ` [PATCH v3 " Lars-Peter Clausen
2010-07-17 12:12 ` [PATCH v4] " Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 11/26] MIPS: JZ4740: Add serial support Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 12/26] MIPS: JZ4740: Add prom support Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 13/26] MIPS: JZ4740: Add platform devices Lars-Peter Clausen
2010-07-17 12:13 ` [PATCH v3] " Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 14/26] MIPS: JZ4740: Add Kbuild files Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 15/26] RTC: Add JZ4740 RTC driver Lars-Peter Clausen
2010-06-19 10:43 ` Marek Vasut
2010-06-19 13:05 ` Lars-Peter Clausen
2010-06-19 13:37 ` Wan ZongShun
2010-06-19 13:53 ` Lars-Peter Clausen
2010-06-19 14:36 ` Wan ZongShun
2010-06-19 14:04 ` Marek Vasut
2010-06-19 17:42 ` Lars-Peter Clausen
2010-06-19 17:53 ` Geert Uytterhoeven
2010-06-19 19:29 ` [PATCH v3] " Lars-Peter Clausen
2010-06-20 1:13 ` [rtc-linux] " Wan ZongShun
2010-06-20 1:23 ` Lars-Peter Clausen
2010-06-20 1:30 ` Wan ZongShun
2010-06-22 5:53 ` Alessandro Zummo
2010-06-19 5:08 ` [PATCH v2 16/26] fbdev: Add JZ4740 framebuffer driver Lars-Peter Clausen
2010-06-19 5:08 ` Lars-Peter Clausen
2010-07-04 22:27 ` Lars-Peter Clausen
2010-07-04 22:27 ` Lars-Peter Clausen
2010-07-07 23:41 ` Andrew Morton
2010-07-07 23:41 ` Andrew Morton
2010-07-08 13:28 ` Lars-Peter Clausen
2010-07-08 13:28 ` Lars-Peter Clausen
2010-07-08 16:46 ` Andrew Morton
2010-07-08 16:46 ` Andrew Morton
2010-07-09 1:26 ` Jaya Kumar
2010-07-09 1:26 ` Jaya Kumar
2010-07-09 15:31 ` Lars-Peter Clausen
2010-07-09 15:31 ` Lars-Peter Clausen
2010-07-17 12:14 ` [PATCH v3] " Lars-Peter Clausen
2010-07-17 12:14 ` Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 17/26] MTD: Nand: Add JZ4740 NAND driver Lars-Peter Clausen
2010-06-19 5:08 ` Lars-Peter Clausen
2010-07-04 22:35 ` [PATCH v2 17/26] MTD: Nand: Add JZ4740 NAND Lars-Peter Clausen
2010-07-08 6:06 ` [PATCH v2 17/26] MTD: Nand: Add JZ4740 NAND driver Artem Bityutskiy
2010-07-08 6:06 ` Artem Bityutskiy
2010-07-08 13:20 ` Lars-Peter Clausen
2010-07-08 13:20 ` Lars-Peter Clausen
2010-07-08 13:19 ` Artem Bityutskiy
2010-07-08 13:19 ` Artem Bityutskiy
2010-07-08 14:02 ` Lars-Peter Clausen
2010-07-08 14:02 ` Lars-Peter Clausen
2010-07-08 14:14 ` Artem Bityutskiy
2010-07-08 14:14 ` Artem Bityutskiy
2010-07-17 12:15 ` [PATCH v3] " Lars-Peter Clausen
2010-07-17 12:15 ` Lars-Peter Clausen
2010-07-18 16:54 ` Artem Bityutskiy
2010-07-18 16:54 ` Artem Bityutskiy
2010-07-18 17:02 ` Lars-Peter Clausen
2010-07-18 17:02 ` Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 18/26] MMC: Add JZ4740 mmc driver Lars-Peter Clausen
2010-06-19 14:46 ` Matt Fleming
2010-06-19 14:46 ` Matt Fleming
2010-06-19 14:46 ` Matt Fleming
2010-06-19 15:29 ` Lars-Peter Clausen
2010-06-28 1:20 ` [PATCH v3] " Lars-Peter Clausen
2010-06-29 20:17 ` Matt Fleming
2010-06-29 20:17 ` Matt Fleming
2010-06-29 20:17 ` Matt Fleming
2010-07-01 15:47 ` Lars-Peter Clausen
2010-06-30 20:55 ` Andrew Morton
2010-07-01 15:45 ` Lars-Peter Clausen
2010-07-12 21:33 ` [PATCH v4] " Lars-Peter Clausen
2010-07-12 21:41 ` Randy Dunlap
2010-07-12 22:07 ` Lars-Peter Clausen
2010-07-12 22:20 ` [PATCH v5] " Lars-Peter Clausen
2010-07-12 22:45 ` Joe Perches
2010-07-12 23:45 ` Lars-Peter Clausen
2010-07-15 21:06 ` [PATCH v6] " Lars-Peter Clausen
2010-07-15 21:16 ` Andrew Morton
2010-07-15 21:37 ` Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 19/26] USB: Add JZ4740 ohci support Lars-Peter Clausen
2010-06-19 17:17 ` Greg KH
2010-06-19 5:08 ` [PATCH v2 20/26] alsa: ASoC: Add JZ4740 codec driver Lars-Peter Clausen
2010-06-19 5:08 ` Lars-Peter Clausen
2010-06-19 14:49 ` [PATCH v3] " Lars-Peter Clausen
2010-06-19 14:49 ` Lars-Peter Clausen
2010-06-20 13:11 ` Mark Brown
2010-06-20 13:11 ` Mark Brown
2010-06-21 22:46 ` [PATCH v4] " Lars-Peter Clausen
2010-06-21 22:46 ` Lars-Peter Clausen
2010-06-22 10:12 ` Liam Girdwood
2010-06-22 10:12 ` Liam Girdwood
2010-06-22 23:12 ` Mark Brown
2010-06-22 23:12 ` Mark Brown
2010-06-19 5:08 ` [PATCH v2 21/26] alsa: ASoC: Add JZ4740 ASoC support Lars-Peter Clausen
2010-06-19 5:08 ` Lars-Peter Clausen
2010-06-19 14:50 ` [PATCH v3] " Lars-Peter Clausen
2010-06-19 14:50 ` Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 22/26] MFD: Add JZ4740 ADC driver Lars-Peter Clausen
2010-07-04 22:47 ` Lars-Peter Clausen
2010-07-05 14:53 ` Samuel Ortiz
2010-07-05 15:43 ` Lars-Peter Clausen
2010-07-05 15:53 ` Samuel Ortiz
2010-07-12 1:48 ` [PATCH v3] " Lars-Peter Clausen
2010-07-14 9:19 ` Samuel Ortiz
2010-06-19 5:08 ` [PATCH v2 23/26] hwmon: " Lars-Peter Clausen
2010-06-19 5:08 ` [lm-sensors] " Lars-Peter Clausen
2010-06-19 8:36 ` Jean Delvare
2010-06-19 8:36 ` Jean Delvare
2010-06-19 8:36 ` Jean Delvare
2010-06-19 12:58 ` Lars-Peter Clausen
2010-06-19 12:58 ` Lars-Peter Clausen
2010-06-19 14:47 ` [PATCH v3] " Lars-Peter Clausen
2010-06-19 14:47 ` [lm-sensors] " Lars-Peter Clausen
2010-06-19 16:24 ` Jean Delvare
2010-06-19 16:24 ` Jean Delvare
2010-06-19 17:59 ` Lars-Peter Clausen
2010-06-19 17:59 ` Lars-Peter Clausen
2010-06-19 19:32 ` [PATCH v4] " Lars-Peter Clausen
2010-06-19 19:32 ` [lm-sensors] " Lars-Peter Clausen
2010-06-20 6:32 ` Jean Delvare
2010-06-20 6:32 ` Jean Delvare
2010-06-20 6:32 ` Jean Delvare
2010-06-19 5:08 ` [PATCH v2 24/26] power: Add JZ4740 battery driver Lars-Peter Clausen
2010-06-27 1:58 ` Lars-Peter Clausen [this message]
2010-06-28 11:43 ` Anton Vorontsov
2010-06-19 5:08 ` [PATCH v2 25/26] MIPS: JZ4740: Add qi_lb60 board support Lars-Peter Clausen
2010-07-17 12:16 ` [PATCH v3] " Lars-Peter Clausen
2010-06-19 5:08 ` [PATCH v2 26/26] alsa: ASoC: JZ4740: Add qi_lb60 board driver Lars-Peter Clausen
2010-06-19 5:08 ` Lars-Peter Clausen
2010-06-19 14:52 ` [PATCH v3] " Lars-Peter Clausen
2010-06-19 14:52 ` Lars-Peter Clausen
2010-06-20 9:26 ` [PATCH v2 00/26] Add support for the Ingenic JZ4740 System-on-a-Chip Thomas Bogendoerfer
2010-06-20 9:26 ` [lm-sensors] [PATCH v2 00/26] Add support for the Ingenic Thomas Bogendoerfer
2010-06-20 9:26 ` [PATCH v2 00/26] Add support for the Ingenic JZ4740 System-on-a-Chip Thomas Bogendoerfer
2010-06-20 9:26 ` Thomas Bogendoerfer
2010-06-20 9:26 ` [PATCH v2 00/26] Add support for the Ingenic JZ4740 Thomas Bogendoerfer
2010-06-20 14:31 ` [PATCH v2 00/26] Add support for the Ingenic JZ4740 System-on-a-Chip Lars-Peter Clausen
2010-06-20 14:31 ` Lars-Peter Clausen
2010-06-20 16:34 ` Thomas Bogendoerfer
2010-06-20 16:49 ` Lars-Peter Clausen
2010-06-20 17:01 ` Thomas Bogendoerfer
2010-06-20 17:57 ` Florian Fainelli
2010-06-20 18:30 ` Lars-Peter Clausen
2010-06-21 2:56 ` Xiangfu Liu
2010-06-21 2:56 ` [lm-sensors] [PATCH v2 00/26] Add support for the Ingenic Xiangfu Liu
2010-06-21 2:56 ` [PATCH v2 00/26] Add support for the Ingenic JZ4740 System-on-a-Chip Xiangfu Liu
2010-06-21 2:56 ` Xiangfu Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C26B05C.3030706@metafoo.de \
--to=lars@metafoo.de \
--cc=cbouatmailru@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.