Foreword: Ralf suggested that it might be a good idea in order to allow for reasonable testing and to avoid build failures due to two-way dependencies in different parts of the kernel, that he applies all the patches once they have been acked by their respective maintainers, feeds them into -next and eventually sends the whole series to Linus. One exception will be the ASoC patches which will, due to major changes in the ASoC subsystem, go through the ASoC tree. So if you are a maintainer for one of the subsystem touched by this series and would rather see the patch going through your tree (given the patch is ok) please tell. This patch series adds support for the Ingenic JZ4740 System-on-a-Chip. The JZ4740 has a mostly MIPS32 compatible core (no on cpu timers) and many on chip peripherals like RTC, NAND, MMC, OHCI, UDC, ADC, I2C, SPI, AC97, I2S, I2S Codec, UART and LCD controller. The JZ4740 is mostly used in eBooks, PMPs and hand-held consoles. This series contains patches for the Qi Ben NanoNote clamshell device as the inital supported device. Changes since v1: There have been some minor changes since v1, mostly code cleanup and some functional changes. One bigger change is that there is now a MFD driver for the ADC core which does IRQ demultiplexing for the ADC unit and synchronizes access to shared registers between the different users of the ADC core. The patch adding a defconfig for the Qi LB60 has been dropped. A detailed list of changes is present in each patch. - Lars Cc: Alessandro Zummo <a.zummo@towertech.it> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Anton Vorontsov <cbouatmailru@gmail.com> Cc: David Brownell <dbrownell@users.sourceforge.net> Cc: David Woodhouse <dwmw2@infradead.org> Cc: Greg Kroah-Hartman <gregkh@suse.de> Cc: Liam Girdwood <lrg@slimlogic.co.uk> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: Paul Gortmaker <p_gortmaker@yahoo.com> Cc: Samuel Ortiz <sameo@linux.intel.com> Cc: alsa-devel@alsa-project.org Cc: ...
This patch adds support for managing the clocks found on JZ4740 SoC through
the Linux clock API.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
arch/mips/include/asm/mach-jz4740/clock.h | 28 +
arch/mips/jz4740/clock-debugfs.c | 109 ++++
arch/mips/jz4740/clock.c | 920 +++++++++++++++++++++++++++++
arch/mips/jz4740/clock.h | 76 +++
4 files changed, 1133 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/include/asm/mach-jz4740/clock.h
create mode 100644 arch/mips/jz4740/clock-debugfs.c
create mode 100644 arch/mips/jz4740/clock.c
create mode 100644 arch/mips/jz4740/clock.h
diff --git a/arch/mips/include/asm/mach-jz4740/clock.h b/arch/mips/include/asm/mach-jz4740/clock.h
new file mode 100644
index 0000000..1b7408d
--- /dev/null
+++ b/arch/mips/include/asm/mach-jz4740/clock.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
+ *
+ * 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 __ASM_JZ4740_CLOCK_H__
+#define __ASM_JZ4740_CLOCK_H__
+
+enum jz4740_wait_mode {
+ JZ4740_WAIT_MODE_IDLE,
+ JZ4740_WAIT_MODE_SLEEP,
+};
+
+void jz4740_clock_set_wait_mode(enum jz4740_wait_mode mode);
+
+void jz4740_clock_udc_enable_auto_suspend(void);
+void jz4740_clock_udc_disable_auto_suspend(void);
+
+#endif
diff --git a/arch/mips/jz4740/clock-debugfs.c b/arch/mips/jz4740/clock-debugfs.c
new file mode 100644
index 0000000..330a0f2
--- /dev/null
+++ b/arch/mips/jz4740/clock-debugfs.c
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2010, Lars-Peter ...This patch adds support for managing the clocks found on JZ4740 SoC through
the Linux clock API.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
Changes since v2
- Fix setting of inital parents for spi and i2s clocks
- In clk_set_parent(), preserve clock enabled/disabled state.
- Set correct get_rate callback for the pll clock
- Fix pll frequency rate formula
---
arch/mips/include/asm/mach-jz4740/clock.h | 28 +
arch/mips/jz4740/clock-debugfs.c | 109 ++++
arch/mips/jz4740/clock.c | 924 +++++++++++++++++++++++++++++
arch/mips/jz4740/clock.h | 76 +++
4 files changed, 1137 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/include/asm/mach-jz4740/clock.h
create mode 100644 arch/mips/jz4740/clock-debugfs.c
create mode 100644 arch/mips/jz4740/clock.c
create mode 100644 arch/mips/jz4740/clock.h
diff --git a/arch/mips/include/asm/mach-jz4740/clock.h b/arch/mips/include/asm/mach-jz4740/clock.h
new file mode 100644
index 0000000..1b7408d
--- /dev/null
+++ b/arch/mips/include/asm/mach-jz4740/clock.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
+ *
+ * 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 __ASM_JZ4740_CLOCK_H__
+#define __ASM_JZ4740_CLOCK_H__
+
+enum jz4740_wait_mode {
+ JZ4740_WAIT_MODE_IDLE,
+ JZ4740_WAIT_MODE_SLEEP,
+};
+
+void jz4740_clock_set_wait_mode(enum jz4740_wait_mode mode);
+
+void jz4740_clock_udc_enable_auto_suspend(void);
+void jz4740_clock_udc_disable_auto_suspend(void);
+
+#endif
diff --git ...This patch adds support for managing the clocks found on JZ4740 SoC through
the Linux clock API.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
Changes since v2
- Fix setting of inital parents for spi and i2s clocks
- In clk_set_parent(), preserve clock enabled/disabled state.
- Set correct get_rate callback for the pll clock
- Fix pll frequency rate formula
Changes since v3
- Move clock initialization to arch_initcall
---
arch/mips/include/asm/mach-jz4740/clock.h | 28 +
arch/mips/jz4740/clock-debugfs.c | 109 ++++
arch/mips/jz4740/clock.c | 924 +++++++++++++++++++++++++++++
arch/mips/jz4740/clock.h | 76 +++
4 files changed, 1137 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/include/asm/mach-jz4740/clock.h
create mode 100644 arch/mips/jz4740/clock-debugfs.c
create mode 100644 arch/mips/jz4740/clock.c
create mode 100644 arch/mips/jz4740/clock.h
diff --git a/arch/mips/include/asm/mach-jz4740/clock.h b/arch/mips/include/asm/mach-jz4740/clock.h
new file mode 100644
index 0000000..1b7408d
--- /dev/null
+++ b/arch/mips/include/asm/mach-jz4740/clock.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
+ *
+ * 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 __ASM_JZ4740_CLOCK_H__
+#define __ASM_JZ4740_CLOCK_H__
+
+enum jz4740_wait_mode {
+ JZ4740_WAIT_MODE_IDLE,
+ JZ4740_WAIT_MODE_SLEEP,
+};
+
+void jz4740_clock_set_wait_mode(enum jz4740_wait_mode mode);
+
+void jz4740_clock_udc_enable_auto_suspend(void);
+void ...This patch adds support for the timer/counter unit on a JZ4740 SoC. This code is used as a common base for the JZ4740 clocksource/clockevent implementation and PWM support. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> --- arch/mips/include/asm/mach-jz4740/timer.h | 22 +++++ arch/mips/jz4740/timer.c | 48 ++++++++++ arch/mips/jz4740/timer.h | 136 +++++++++++++++++++++++++++++ 3 files changed, 206 insertions(+), 0 deletions(-) create mode 100644 arch/mips/include/asm/mach-jz4740/timer.h create mode 100644 arch/mips/jz4740/timer.c create mode 100644 arch/mips/jz4740/timer.h diff --git a/arch/mips/include/asm/mach-jz4740/timer.h b/arch/mips/include/asm/mach-jz4740/timer.h new file mode 100644 index 0000000..9baa03c --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/timer.h @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> + * JZ4740 platform timer support + * + * 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 __ASM_MACH_JZ4740_TIMER +#define __ASM_MACH_JZ4740_TIMER + +void jz4740_timer_enable_watchdog(void); +void jz4740_timer_disable_watchdog(void); + +#endif diff --git a/arch/mips/jz4740/timer.c b/arch/mips/jz4740/timer.c new file mode 100644 index 0000000..b2c0151 --- /dev/null +++ b/arch/mips/jz4740/timer.c @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> + * JZ4740 platform timer support + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU ...
This patch add clocksource and clockevent support for the timer/counter unit on
JZ4740 SoCs.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
Changes since v1
- Do not setup timer IRQ with IRQF_DISABLED, since it is a noop now.
---
arch/mips/jz4740/irq.c | 1 -
arch/mips/jz4740/time.c | 144 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 144 insertions(+), 1 deletions(-)
create mode 100644 arch/mips/jz4740/time.c
diff --git a/arch/mips/jz4740/irq.c b/arch/mips/jz4740/irq.c
index ea19f0e..e259d02 100644
--- a/arch/mips/jz4740/irq.c
+++ b/arch/mips/jz4740/irq.c
@@ -88,7 +88,6 @@ static irqreturn_t jz4740_cascade(int irq, void *data)
static struct irqaction jz4740_cascade_action = {
.handler = jz4740_cascade,
.name = "JZ4740 cascade interrupt",
- .flags = IRQF_DISABLED,
};
void __init arch_init_irq(void)
diff --git a/arch/mips/jz4740/time.c b/arch/mips/jz4740/time.c
new file mode 100644
index 0000000..fe01678
--- /dev/null
+++ b/arch/mips/jz4740/time.c
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
+ * JZ4740 platform time support
+ *
+ * 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.
+ *
+ */
+
+#include <linux/interrupt.h>
+#include <linux/kernel.h>
+#include <linux/time.h>
+
+#include <linux/clockchips.h>
+
+#include <asm/mach-jz4740/irq.h>
+#include <asm/time.h>
+
+#include "clock.h"
+#include "timer.h"
+
+#define TIMER_CLOCKEVENT 0
+#define TIMER_CLOCKSOURCE 1
+
+static uint16_t jz4740_jiffies_per_tick;
+
+static cycle_t jz4740_clocksource_read(struct ...This patch adds support for suspend/resume and poweroff/reboot on a JZ4740 SoC.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
arch/mips/jz4740/pm.c | 56 ++++++++++++++++++++++++++++++++
arch/mips/jz4740/reset.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++
arch/mips/jz4740/reset.h | 7 ++++
3 files changed, 142 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/jz4740/pm.c
create mode 100644 arch/mips/jz4740/reset.c
create mode 100644 arch/mips/jz4740/reset.h
diff --git a/arch/mips/jz4740/pm.c b/arch/mips/jz4740/pm.c
new file mode 100644
index 0000000..a999458
--- /dev/null
+++ b/arch/mips/jz4740/pm.c
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
+ * JZ4740 SoC power management support
+ *
+ * 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.
+ *
+ */
+
+#include <linux/init.h>
+#include <linux/pm.h>
+#include <linux/delay.h>
+#include <linux/suspend.h>
+
+#include <asm/mach-jz4740/clock.h>
+
+#include "clock.h"
+#include "irq.h"
+
+static int jz4740_pm_enter(suspend_state_t state)
+{
+ jz4740_intc_suspend();
+ jz4740_clock_suspend();
+
+ jz4740_clock_set_wait_mode(JZ4740_WAIT_MODE_SLEEP);
+
+ __asm__(".set\tmips3\n\t"
+ "wait\n\t"
+ ".set\tmips0");
+
+ jz4740_clock_set_wait_mode(JZ4740_WAIT_MODE_IDLE);
+
+ jz4740_clock_resume();
+ jz4740_intc_resume();
+
+ return 0;
+}
+
+static struct platform_suspend_ops jz4740_pm_ops = {
+ .valid = suspend_valid_only_mem,
+ .enter = jz4740_pm_enter,
+};
+
+static int __init ...This patch adds support for IRQ handling on a JZ4740 SoC. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> --- Changes since v1 - Reserve IRQ numbers for ADC IRQ demultiplexing --- arch/mips/include/asm/mach-jz4740/irq.h | 57 ++++++++++ arch/mips/jz4740/irq.c | 170 +++++++++++++++++++++++++++++++ arch/mips/jz4740/irq.h | 21 ++++ 3 files changed, 248 insertions(+), 0 deletions(-) create mode 100644 arch/mips/include/asm/mach-jz4740/irq.h create mode 100644 arch/mips/jz4740/irq.c create mode 100644 arch/mips/jz4740/irq.h diff --git a/arch/mips/include/asm/mach-jz4740/irq.h b/arch/mips/include/asm/mach-jz4740/irq.h new file mode 100644 index 0000000..a865c98 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/irq.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> + * JZ4740 IRQ definitions + * + * 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 __ASM_MACH_JZ4740_IRQ_H__ +#define __ASM_MACH_JZ4740_IRQ_H__ + +#define MIPS_CPU_IRQ_BASE 0 +#define JZ4740_IRQ_BASE 8 + +/* 1st-level interrupts */ +#define JZ4740_IRQ(x) (JZ4740_IRQ_BASE + (x)) +#define JZ4740_IRQ_I2C JZ4740_IRQ(1) +#define JZ4740_IRQ_UHC JZ4740_IRQ(3) +#define JZ4740_IRQ_UART1 JZ4740_IRQ(8) +#define JZ4740_IRQ_UART0 JZ4740_IRQ(9) +#define JZ4740_IRQ_SADC JZ4740_IRQ(12) +#define JZ4740_IRQ_MSC JZ4740_IRQ(14) +#define JZ4740_IRQ_RTC JZ4740_IRQ(15) +#define JZ4740_IRQ_SSI JZ4740_IRQ(16) +#define JZ4740_IRQ_CIM JZ4740_IRQ(17) +#define JZ4740_IRQ_AIC JZ4740_IRQ(18) +#define ...
This patch adds support for IRQ handling on a JZ4740 SoC. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> -- Changes since v1 - Reserve IRQ numbers for ADC IRQ demultiplexing Changes since v2 - Use __fls instead of ffs in the interrupt demuxer --- arch/mips/include/asm/mach-jz4740/irq.h | 57 +++++++++++ arch/mips/jz4740/irq.c | 167 +++++++++++++++++++++++++++++++ arch/mips/jz4740/irq.h | 21 ++++ 3 files changed, 245 insertions(+), 0 deletions(-) create mode 100644 arch/mips/include/asm/mach-jz4740/irq.h create mode 100644 arch/mips/jz4740/irq.c create mode 100644 arch/mips/jz4740/irq.h diff --git a/arch/mips/include/asm/mach-jz4740/irq.h b/arch/mips/include/asm/mach-jz4740/irq.h new file mode 100644 index 0000000..a865c98 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/irq.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> + * JZ4740 IRQ definitions + * + * 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 __ASM_MACH_JZ4740_IRQ_H__ +#define __ASM_MACH_JZ4740_IRQ_H__ + +#define MIPS_CPU_IRQ_BASE 0 +#define JZ4740_IRQ_BASE 8 + +/* 1st-level interrupts */ +#define JZ4740_IRQ(x) (JZ4740_IRQ_BASE + (x)) +#define JZ4740_IRQ_I2C JZ4740_IRQ(1) +#define JZ4740_IRQ_UHC JZ4740_IRQ(3) +#define JZ4740_IRQ_UART1 JZ4740_IRQ(8) +#define JZ4740_IRQ_UART0 JZ4740_IRQ(9) +#define JZ4740_IRQ_SADC JZ4740_IRQ(12) +#define JZ4740_IRQ_MSC JZ4740_IRQ(14) +#define JZ4740_IRQ_RTC JZ4740_IRQ(15) +#define JZ4740_IRQ_SSI JZ4740_IRQ(16) +#define ...
This patch adds plat_mem_setup and get_system_type for JZ4740 SoCs.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
arch/mips/jz4740/setup.c | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/jz4740/setup.c
diff --git a/arch/mips/jz4740/setup.c b/arch/mips/jz4740/setup.c
new file mode 100644
index 0000000..6a9e14d
--- /dev/null
+++ b/arch/mips/jz4740/setup.c
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de>
+ * JZ4740 setup code
+ *
+ * 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.
+ *
+ */
+
+#include <linux/init.h>
+#include <linux/kernel.h>
+
+#include "reset.h"
+
+void __init plat_mem_setup(void)
+{
+ jz4740_reset_init();
+}
+
+const char *get_system_type(void)
+{
+ return "JZ4740";
+}
--
1.5.6.5
--
This patch adds gpiolib support for JZ4740 SoCs.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
Changes since v1
- Fix possible race in GPIO-IRQ setup code
---
arch/mips/include/asm/mach-jz4740/gpio.h | 398 ++++++++++++++++++++
arch/mips/jz4740/gpio.c | 601 ++++++++++++++++++++++++++++++
2 files changed, 999 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/include/asm/mach-jz4740/gpio.h
create mode 100644 arch/mips/jz4740/gpio.c
diff --git a/arch/mips/include/asm/mach-jz4740/gpio.h b/arch/mips/include/asm/mach-jz4740/gpio.h
new file mode 100644
index 0000000..3ff3001
--- /dev/null
+++ b/arch/mips/include/asm/mach-jz4740/gpio.h
@@ -0,0 +1,398 @@
+/*
+ * Copyright (C) 2009, Lars-Peter Clausen <lars@metafoo.de>
+ * JZ4740 GPIO pin definitions
+ *
+ * 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 _JZ_GPIO_H
+#define _JZ_GPIO_H
+
+#include <linux/types.h>
+
+enum jz_gpio_function {
+ JZ_GPIO_FUNC_NONE,
+ JZ_GPIO_FUNC1,
+ JZ_GPIO_FUNC2,
+ JZ_GPIO_FUNC3,
+};
+
+
+/*
+ Usually a driver for a SoC component has to request several gpio pins and
+ configure them as funcion pins.
+ jz_gpio_bulk_request can be used to ease this process.
+ Usually one would do something like:
+
+ const static struct jz_gpio_bulk_request i2c_pins[] = {
+ JZ_GPIO_BULK_PIN(I2C_SDA),
+ JZ_GPIO_BULK_PIN(I2C_SCK),
+ };
+
+ inside the probe function:
+
+ ret = jz_gpio_bulk_request(i2c_pins, ARRAY_SIZE(i2c_pins));
+ if (ret) {
+ ...
+
+ inside the remove function:
+
+ ...This patch adds gpiolib support for JZ4740 SoCs.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
Changes since v1
- Fix possible irq setup race
Changes since v2
- Use __fls instead of ffs in the interupt demuxer
- Fix LCD pins wrongly labeld as MEM pins
---
arch/mips/include/asm/mach-jz4740/gpio.h | 398 ++++++++++++++++++++
arch/mips/jz4740/gpio.c | 604 ++++++++++++++++++++++++++++++
2 files changed, 1002 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/include/asm/mach-jz4740/gpio.h
create mode 100644 arch/mips/jz4740/gpio.c
diff --git a/arch/mips/include/asm/mach-jz4740/gpio.h b/arch/mips/include/asm/mach-jz4740/gpio.h
new file mode 100644
index 0000000..7b74703
--- /dev/null
+++ b/arch/mips/include/asm/mach-jz4740/gpio.h
@@ -0,0 +1,398 @@
+/*
+ * Copyright (C) 2009, Lars-Peter Clausen <lars@metafoo.de>
+ * JZ4740 GPIO pin definitions
+ *
+ * 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 _JZ_GPIO_H
+#define _JZ_GPIO_H
+
+#include <linux/types.h>
+
+enum jz_gpio_function {
+ JZ_GPIO_FUNC_NONE,
+ JZ_GPIO_FUNC1,
+ JZ_GPIO_FUNC2,
+ JZ_GPIO_FUNC3,
+};
+
+
+/*
+ Usually a driver for a SoC component has to request several gpio pins and
+ configure them as funcion pins.
+ jz_gpio_bulk_request can be used to ease this process.
+ Usually one would do something like:
+
+ const static struct jz_gpio_bulk_request i2c_pins[] = {
+ JZ_GPIO_BULK_PIN(I2C_SDA),
+ JZ_GPIO_BULK_PIN(I2C_SCK),
+ };
+
+ inside the probe function:
+
+ ret = jz_gpio_bulk_request(i2c_pins, ...This patch adds support for DMA transfers on JZ4740 SoCs.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
arch/mips/include/asm/mach-jz4740/dma.h | 90 ++++++++++
arch/mips/jz4740/dma.c | 289 +++++++++++++++++++++++++++++++
2 files changed, 379 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/include/asm/mach-jz4740/dma.h
create mode 100644 arch/mips/jz4740/dma.c
diff --git a/arch/mips/include/asm/mach-jz4740/dma.h b/arch/mips/include/asm/mach-jz4740/dma.h
new file mode 100644
index 0000000..a3be121
--- /dev/null
+++ b/arch/mips/include/asm/mach-jz4740/dma.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
+ * JZ7420/JZ4740 DMA definitions
+ *
+ * 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 __ASM_MACH_JZ4740_DMA_H__
+#define __ASM_MACH_JZ4740_DMA_H__
+
+struct jz4740_dma_chan;
+
+enum jz4740_dma_request_type {
+ JZ4740_DMA_TYPE_AUTO_REQUEST = 8,
+ JZ4740_DMA_TYPE_UART_TRANSMIT = 20,
+ JZ4740_DMA_TYPE_UART_RECEIVE = 21,
+ JZ4740_DMA_TYPE_SPI_TRANSMIT = 22,
+ JZ4740_DMA_TYPE_SPI_RECEIVE = 23,
+ JZ4740_DMA_TYPE_AIC_TRANSMIT = 24,
+ JZ4740_DMA_TYPE_AIC_RECEIVE = 25,
+ JZ4740_DMA_TYPE_MMC_TRANSMIT = 26,
+ JZ4740_DMA_TYPE_MMC_RECEIVE = 27,
+ JZ4740_DMA_TYPE_TCU = 28,
+ JZ4740_DMA_TYPE_SADC = 29,
+ JZ4740_DMA_TYPE_SLCD = 30,
+};
+
+enum jz4740_dma_width {
+ JZ4740_DMA_WIDTH_32BIT = 0,
+ JZ4740_DMA_WIDTH_8BIT = 1,
+ JZ4740_DMA_WIDTH_16BIT = 2,
+};
+
+enum jz4740_dma_transfer_size {
+ JZ4740_DMA_TRANSFER_SIZE_4BYTE = ...This patch adds support for the PWM part of the timer unit on a JZ4740 SoC.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
arch/mips/jz4740/pwm.c | 169 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 169 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/jz4740/pwm.c
diff --git a/arch/mips/jz4740/pwm.c b/arch/mips/jz4740/pwm.c
new file mode 100644
index 0000000..f28369c
--- /dev/null
+++ b/arch/mips/jz4740/pwm.c
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
+ * JZ4740 platform PWM support
+ *
+ * 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.
+ *
+ */
+
+#include <linux/kernel.h>
+
+#include <linux/clk.h>
+#include <linux/err.h>
+#include <linux/pwm.h>
+#include <linux/gpio.h>
+
+#include <asm/mach-jz4740/gpio.h>
+#include "timer.h"
+
+static struct clk *jz4740_pwm_clk;
+
+DEFINE_MUTEX(jz4740_pwm_mutex);
+
+struct pwm_device {
+ unsigned int id;
+ unsigned int gpio;
+ bool used;
+};
+
+static struct pwm_device jz4740_pwm_list[] = {
+ { 2, JZ_GPIO_PWM2, false },
+ { 3, JZ_GPIO_PWM3, false },
+ { 4, JZ_GPIO_PWM4, false },
+ { 5, JZ_GPIO_PWM5, false },
+ { 6, JZ_GPIO_PWM6, false },
+ { 7, JZ_GPIO_PWM7, false },
+};
+
+struct pwm_device *pwm_request(int id, const char *label)
+{
+ int ret = 0;
+ struct pwm_device *pwm;
+
+ if (!jz4740_pwm_clk) {
+ jz4740_pwm_clk = clk_get(NULL, "ext");
+
+ if (IS_ERR(jz4740_pwm_clk))
+ return ERR_CAST(jz4740_pwm_clk);
+ }
+
+ if (id < 2 || id > 7)
+ return ERR_PTR(-ENOENT);
+
+ mutex_lock(&jz4740_pwm_mutex);
+
+ pwm ...This patch adds support for the PWM part of the timer unit on a JZ4740 SoC.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
Changes since v2
- Fix handling if the pwm clock is not available
---
arch/mips/jz4740/pwm.c | 177 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 177 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/jz4740/pwm.c
diff --git a/arch/mips/jz4740/pwm.c b/arch/mips/jz4740/pwm.c
new file mode 100644
index 0000000..0bb5b66
--- /dev/null
+++ b/arch/mips/jz4740/pwm.c
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
+ * JZ4740 platform PWM support
+ *
+ * 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.
+ *
+ */
+
+#include <linux/kernel.h>
+
+#include <linux/clk.h>
+#include <linux/err.h>
+#include <linux/pwm.h>
+#include <linux/gpio.h>
+
+#include <asm/mach-jz4740/gpio.h>
+#include "timer.h"
+
+static struct clk *jz4740_pwm_clk;
+
+DEFINE_MUTEX(jz4740_pwm_mutex);
+
+struct pwm_device {
+ unsigned int id;
+ unsigned int gpio;
+ bool used;
+};
+
+static struct pwm_device jz4740_pwm_list[] = {
+ { 2, JZ_GPIO_PWM2, false },
+ { 3, JZ_GPIO_PWM3, false },
+ { 4, JZ_GPIO_PWM4, false },
+ { 5, JZ_GPIO_PWM5, false },
+ { 6, JZ_GPIO_PWM6, false },
+ { 7, JZ_GPIO_PWM7, false },
+};
+
+struct pwm_device *pwm_request(int id, const char *label)
+{
+ int ret = 0;
+ struct pwm_device *pwm;
+
+ if (id < 2 || id > 7 || !jz4740_pwm_clk)
+ return ERR_PTR(-ENOENT);
+
+ mutex_lock(&jz4740_pwm_mutex);
+
+ pwm = &jz4740_pwm_list[id - 2];
+ if (pwm->used)
+ ret = ...This patch adds support for the PWM part of the timer unit on a JZ4740 SoC.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
Changes since v2
- Fix handling if the pwm clock is not available
Changes since v3
- Move pwm subsys_initcall to subsys_initcall
---
arch/mips/jz4740/pwm.c | 177 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 177 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/jz4740/pwm.c
diff --git a/arch/mips/jz4740/pwm.c b/arch/mips/jz4740/pwm.c
new file mode 100644
index 0000000..a26a6fa
--- /dev/null
+++ b/arch/mips/jz4740/pwm.c
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
+ * JZ4740 platform PWM support
+ *
+ * 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.
+ *
+ */
+
+#include <linux/kernel.h>
+
+#include <linux/clk.h>
+#include <linux/err.h>
+#include <linux/pwm.h>
+#include <linux/gpio.h>
+
+#include <asm/mach-jz4740/gpio.h>
+#include "timer.h"
+
+static struct clk *jz4740_pwm_clk;
+
+DEFINE_MUTEX(jz4740_pwm_mutex);
+
+struct pwm_device {
+ unsigned int id;
+ unsigned int gpio;
+ bool used;
+};
+
+static struct pwm_device jz4740_pwm_list[] = {
+ { 2, JZ_GPIO_PWM2, false },
+ { 3, JZ_GPIO_PWM3, false },
+ { 4, JZ_GPIO_PWM4, false },
+ { 5, JZ_GPIO_PWM5, false },
+ { 6, JZ_GPIO_PWM6, false },
+ { 7, JZ_GPIO_PWM7, false },
+};
+
+struct pwm_device *pwm_request(int id, const char *label)
+{
+ int ret = 0;
+ struct pwm_device *pwm;
+
+ if (id < 2 || id > 7 || !jz4740_pwm_clk)
+ return ...This patch adds support for serials on a JZ4740 SoC.
The JZ4740 UART interface is almost 16550 compatible.
The UART module needs to be enabled by setting a bit in the FCR register and it
has support for receive timeout interrupts.
Instead of adding yet another machine specific quirk to the 8250 serial driver
we provide a serial_out implementation which sets the required additional flags.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
arch/mips/jz4740/serial.c | 33 +++++++++++++++++++++++++++++++++
arch/mips/jz4740/serial.h | 21 +++++++++++++++++++++
2 files changed, 54 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/jz4740/serial.c
create mode 100644 arch/mips/jz4740/serial.h
diff --git a/arch/mips/jz4740/serial.c b/arch/mips/jz4740/serial.c
new file mode 100644
index 0000000..d23de45
--- /dev/null
+++ b/arch/mips/jz4740/serial.c
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
+ * JZ4740 serial support
+ *
+ * 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.
+ *
+ */
+
+#include <linux/io.h>
+#include <linux/serial_core.h>
+#include <linux/serial_reg.h>
+
+void jz4740_serial_out(struct uart_port *p, int offset, int value)
+{
+ switch (offset) {
+ case UART_FCR:
+ value |= 0x10; /* Enable uart module */
+ break;
+ case UART_IER:
+ value |= (value & 0x4) << 2;
+ break;
+ default:
+ break;
+ }
+ writeb(value, p->membase + (offset << p->regshift));
+}
diff --git a/arch/mips/jz4740/serial.h b/arch/mips/jz4740/serial.h
new file mode 100644
index 0000000..247a7d8
--- ...This patch adds support for initializing arcs_cmdline on JZ4740 based machines
and provides a prom_putchar implementation.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
arch/mips/jz4740/prom.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 68 insertions(+), 0 deletions(-)
create mode 100644 arch/mips/jz4740/prom.c
diff --git a/arch/mips/jz4740/prom.c b/arch/mips/jz4740/prom.c
new file mode 100644
index 0000000..cfeac15
--- /dev/null
+++ b/arch/mips/jz4740/prom.c
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
+ * JZ4740 SoC prom code
+ *
+ * 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.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/string.h>
+
+#include <linux/serial_reg.h>
+
+#include <asm/bootinfo.h>
+#include <asm/mach-jz4740/base.h>
+
+void jz4740_init_cmdline(int argc, char *argv[])
+{
+ unsigned int count = COMMAND_LINE_SIZE - 1;
+ int i;
+ char *dst = &(arcs_cmdline[0]);
+ char *src;
+
+ for (i = 1; i < argc && count; ++i) {
+ src = argv[i];
+ while (*src && count) {
+ *dst++ = *src++;
+ --count;
+ }
+ *dst++ = ' ';
+ }
+ if (i > 1)
+ --dst;
+
+ *dst = 0;
+}
+
+void __init prom_init(void)
+{
+ jz4740_init_cmdline((int)fw_arg0, (char **)fw_arg1);
+ mips_machtype = MACH_INGENIC_JZ4740;
+}
+
+void __init prom_free_prom_memory(void)
+{
+}
+
+#define UART_REG(_reg) ((void __iomem *)CKSEG1ADDR(JZ4740_UART0_BASE_ADDR + (_reg << 2)))
+
+void prom_putchar(char c)
+{
+ uint8_t ...This patch adds platform devices for all the JZ4740 platform drivers. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> --- Changes since v1 * Add JZ4740 PCM device * Add ADC MFD device and remove battery device --- arch/mips/include/asm/mach-jz4740/platform.h | 36 ++++ arch/mips/jz4740/platform.c | 284 ++++++++++++++++++++++++++ 2 files changed, 320 insertions(+), 0 deletions(-) create mode 100644 arch/mips/include/asm/mach-jz4740/platform.h create mode 100644 arch/mips/jz4740/platform.c diff --git a/arch/mips/include/asm/mach-jz4740/platform.h b/arch/mips/include/asm/mach-jz4740/platform.h new file mode 100644 index 0000000..8987a76 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/platform.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> + * JZ4740 platform device definitions + * + * 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_PLATFORM_H +#define __JZ4740_PLATFORM_H + +#include <linux/platform_device.h> + +extern struct platform_device jz4740_usb_ohci_device; +extern struct platform_device jz4740_udc_device; +extern struct platform_device jz4740_mmc_device; +extern struct platform_device jz4740_rtc_device; +extern struct platform_device jz4740_i2c_device; +extern struct platform_device jz4740_nand_device; +extern struct platform_device jz4740_framebuffer_device; +extern struct platform_device jz4740_i2s_device; +extern struct platform_device jz4740_pcm_device; +extern struct platform_device jz4740_codec_device; +extern struct ...
This patch adds platform devices for all the JZ4740 platform drivers. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> --- Changes since v1 - Add JZ4740 PCM device - Add ADC MFD device and remove battery device Changes since v2 - Add memory region for NAND bank --- arch/mips/include/asm/mach-jz4740/platform.h | 36 ++++ arch/mips/jz4740/platform.c | 291 ++++++++++++++++++++++++++ 2 files changed, 327 insertions(+), 0 deletions(-) create mode 100644 arch/mips/include/asm/mach-jz4740/platform.h create mode 100644 arch/mips/jz4740/platform.c diff --git a/arch/mips/include/asm/mach-jz4740/platform.h b/arch/mips/include/asm/mach-jz4740/platform.h new file mode 100644 index 0000000..8987a76 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/platform.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> + * JZ4740 platform device definitions + * + * 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_PLATFORM_H +#define __JZ4740_PLATFORM_H + +#include <linux/platform_device.h> + +extern struct platform_device jz4740_usb_ohci_device; +extern struct platform_device jz4740_udc_device; +extern struct platform_device jz4740_mmc_device; +extern struct platform_device jz4740_rtc_device; +extern struct platform_device jz4740_i2c_device; +extern struct platform_device jz4740_nand_device; +extern struct platform_device jz4740_framebuffer_device; +extern struct platform_device jz4740_i2s_device; +extern struct platform_device jz4740_pcm_device; +extern struct ...
This patch adds the Kbuild files for the JZ4740 architecture and adds JZ4740 support to the MIPS Kbuild files. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> --- Changes since v1 - Adjust to MIPS Kbuild changes --- arch/mips/Kbuild.platforms | 1 + arch/mips/Kconfig | 13 +++++++++++++ arch/mips/jz4740/Kconfig | 8 ++++++++ arch/mips/jz4740/Makefile | 18 ++++++++++++++++++ arch/mips/jz4740/Platform | 5 +++++ 5 files changed, 45 insertions(+), 0 deletions(-) create mode 100644 arch/mips/jz4740/Kconfig create mode 100644 arch/mips/jz4740/Makefile create mode 100644 arch/mips/jz4740/Platform diff --git a/arch/mips/Kbuild.platforms b/arch/mips/Kbuild.platforms index ea3b96c..78439b8 100644 --- a/arch/mips/Kbuild.platforms +++ b/arch/mips/Kbuild.platforms @@ -9,6 +9,7 @@ platforms += cobalt platforms += dec platforms += emma platforms += jazz +platforms += jz4740 platforms += lasat platforms += loongson platforms += mipssim diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index cdaae94..4d44bad 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -162,6 +162,18 @@ config MACH_JAZZ Members include the Acer PICA, MIPS Magnum 4000, MIPS Millennium and Olivetti M700-10 workstations. +config MACH_JZ4740 + bool "Ingenic JZ4740 based machines" + select SYS_HAS_CPU_MIPS32_R1 + select SYS_SUPPORTS_32BIT_KERNEL + select SYS_SUPPORTS_LITTLE_ENDIAN + select DMA_NONCOHERENT + select IRQ_CPU + select GENERIC_GPIO + select ARCH_REQUIRE_GPIOLIB + select SYS_HAS_EARLY_PRINTK + select HAVE_PWM + config LASAT bool "LASAT Networks platforms" select CEVT_R4K @@ -686,6 +698,7 @@ endchoice source "arch/mips/alchemy/Kconfig" source "arch/mips/bcm63xx/Kconfig" source "arch/mips/jazz/Kconfig" +source "arch/mips/jz4740/Kconfig" source "arch/mips/lasat/Kconfig" source "arch/mips/pmc-sierra/Kconfig" source "arch/mips/powertv/Kconfig" diff --git a/arch/mips/jz4740/Kconfig b/arch/mips/jz4740/Kconfig new file ...
This patch adds support for the RTC unit on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Alessandro Zummo <a.zummo@towertech.it> Cc: Paul Gortmaker <p_gortmaker@yahoo.com> Cc: Wan ZongShun <mcuos.com@gmail.com> Cc: Marek Vasut <marek.vasut@gmail.com> Cc: rtc-linux@googlegroups.com --- Changes since v1 - Use dev_get_drvdata directly instead of wrapping it in dev_to_rtc - Add common implementation for jz4740_rtc_{alarm,update}_irq_enable - Check whether rtc structure could be allocated - Fix deadlocks which could occur if the HW was broken --- drivers/rtc/Kconfig | 11 ++ drivers/rtc/Makefile | 1 + drivers/rtc/rtc-jz4740.c | 341 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 353 insertions(+), 0 deletions(-) create mode 100644 drivers/rtc/rtc-jz4740.c diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 10ba12c..d0ed7e6 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -905,4 +905,15 @@ config RTC_DRV_MPC5121 This driver can also be built as a module. If so, the module will be called rtc-mpc5121. +config RTC_DRV_JZ4740 + tristate "Ingenic JZ4740 SoC" + depends on RTC_CLASS + depends on MACH_JZ4740 + help + If you say yes here you get support for the Ingenic JZ4740 SoC RTC + controller. + + This driver can also be buillt as a module. If so, the module + will be called rtc-jz4740. + endif # RTC_CLASS diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index 5adbba7..fedf9bb 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile @@ -47,6 +47,7 @@ obj-$(CONFIG_RTC_DRV_EP93XX) += rtc-ep93xx.o obj-$(CONFIG_RTC_DRV_FM3130) += rtc-fm3130.o obj-$(CONFIG_RTC_DRV_GENERIC) += rtc-generic.o obj-$(CONFIG_RTC_DRV_ISL1208) += rtc-isl1208.o +obj-$(CONFIG_RTC_DRV_JZ4740) += rtc-jz4740.o obj-$(CONFIG_RTC_DRV_M41T80) += rtc-m41t80.o obj-$(CONFIG_RTC_DRV_M41T94) += rtc-m41t94.o obj-$(CONFIG_RTC_DRV_M48T35) += rtc-m48t35.o diff --git a/drivers/rtc/rtc-jz4740.c ...
if (!timeout) {
scream_and_die_in_pain();
dev_err("I died");
... or something like that ... what if it times out, in this implementation,
noone will know this failed.
I haven't looked through the whole source code, but can't this be wrapped into
the reg_write() ?
Cheers
--
Hi
Well IF it will ever die, you'll notice cause your rtc clock won't work
anymore.
It could be wrapped into reg_write, but there is a different version of
the SoC with the only difference of the RTC unit being that a different
mechanism is used determine whether it is ok to write or not. So it
Why would that be preferable? In the non-debug, non-rt case this will
expand to local_irq_{save,restore} anyway, but you'll lose the semantics
Thanks for reviewing
- Lars
--
Anyway,spin_lock_irqsave is most universal and secure lock function, it can You are right, but it is not true reason. Please keep (!!) here, to make sure 'enabled' and 'pending' to be '0' or '1' is good habit, since they are 'unsigned char' variables. Please use kzalloc or kmalloc plus memset, but you forget to add memset, --
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 All fields of the struct are initialized in probe function, so kzalloc IRQF_DISABLED is deprecated and IRQF_SHARED doesn't make any sense here. In fact not requesting with IRQF_SHARED might help to spot errors if another driver requested the IRQ by accident (Or this driver Thanks for reviewing - - Lars -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkwcy80ACgkQBX4mSR26RiM+lgCfZPjAyf1kJstVzqIVlv2uCGMc ruMAoIRF2fDWMG8mQJFb9V7iTmVTSgqs =2MQV -----END PGP SIGNATURE----- --
Of course, you have the correct reason, but using kzalloc is good habit, now, many people submit their patches to convert kmalloc + memset. In addition, if some guys write their drivers refer to your this driver, but they did not know initializing all the fields of struct is indispensible, which will be a potential dangerous. Other parts of The driver look good to me, except this issue, so I cannot recommend -- *linux-arm-kernel mailing list mail addr:linux-arm-kernel@lists.infradead.org you can subscribe by: http://lists.infradead.org/mailman/listinfo/linux-arm-kernel * linux-arm-NUC900 mailing list mail addr:NUC900@googlegroups.com main web: https://groups.google.com/group/NUC900 you can subscribe it by sending me mail: mcuos.com@gmail.com --
I believe on SMP systems, local_irq_save will give you finer locking --
That would spam the kernel log. The best solution would be to propagate a -EIO up to rtc_ops callers. But I'm not sure if the overhead is worth platform_set_drvdata(pdev, data) expands to dev_set_drvdata(&(pdev)->dev, data) - Lars --
If the driver will ever be used on a SMP system, local_irq_save() will
not protect
against concurrent accesses on different CPUs. So it's better to use
spin_lock_irqsave().
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
--
This patch adds support for the RTC unit on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Alessandro Zummo <a.zummo@towertech.it> Cc: Paul Gortmaker <p_gortmaker@yahoo.com> Cc: rtc-linux@googlegroups.com -- Changes since v1 - Use dev_get_drvdata directly instead of wrapping it in dev_to_rtc - Add common implementation for jz4740_rtc_{alarm,update}_irq_enable - Check whether rtc structure could be allocated - Remove deadlocks which could occur if the HW was broken Changes since v2 - Use kzalloc instead of kmalloc - Propagate errors in jz4740_rtc_reg_write up to its callers --- drivers/rtc/Kconfig | 11 ++ drivers/rtc/Makefile | 1 + drivers/rtc/rtc-jz4740.c | 345 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 357 insertions(+), 0 deletions(-) create mode 100644 drivers/rtc/rtc-jz4740.c diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 10ba12c..d0ed7e6 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -905,4 +905,15 @@ config RTC_DRV_MPC5121 This driver can also be built as a module. If so, the module will be called rtc-mpc5121. +config RTC_DRV_JZ4740 + tristate "Ingenic JZ4740 SoC" + depends on RTC_CLASS + depends on MACH_JZ4740 + help + If you say yes here you get support for the Ingenic JZ4740 SoC RTC + controller. + + This driver can also be buillt as a module. If so, the module + will be called rtc-jz4740. + endif # RTC_CLASS diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index 5adbba7..fedf9bb 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile @@ -47,6 +47,7 @@ obj-$(CONFIG_RTC_DRV_EP93XX) += rtc-ep93xx.o obj-$(CONFIG_RTC_DRV_FM3130) += rtc-fm3130.o obj-$(CONFIG_RTC_DRV_GENERIC) += rtc-generic.o obj-$(CONFIG_RTC_DRV_ISL1208) += rtc-isl1208.o +obj-$(CONFIG_RTC_DRV_JZ4740) += rtc-jz4740.o obj-$(CONFIG_RTC_DRV_M41T80) += rtc-m41t80.o obj-$(CONFIG_RTC_DRV_M41T94) += rtc-m41t94.o obj-$(CONFIG_RTC_DRV_M48T35) += ...
Acked-by: Wan ZongShun <mcuos.com@gmail.com> Andrew, the v3 patch has fixed some above issues, it looks good to me now. Could you please consider merging it to your git tree? --
Hi As written in the introduction mail to this thread it would be good if the majority of the patches could go through Ralfs tree. So if the patch is good an "Acked-by:" would be preferable. Thanks, - Lars --
Okay, Sound like good to me, please do you want to do. --
On Sat, 19 Jun 2010 21:29:50 +0200 Acked-by: Alessandro Zummo <a.zummo@towertech.it> -- Best regards, Alessandro Zummo, Tower Technologies - Torino, Italy http://www.towertech.it --
This patch adds support for the LCD controller on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: linux-fbdev@vger.kernel.org --- Changes since v1 - Use __packed instead of __attribute__((packed)) - Make jzfb_fix const - Only set mode in set_par if it has changed --- drivers/video/Kconfig | 9 + drivers/video/Makefile | 1 + drivers/video/jz4740_fb.c | 817 +++++++++++++++++++++++++++++++++++++++++++++ include/linux/jz4740_fb.h | 58 ++++ 4 files changed, 885 insertions(+), 0 deletions(-) create mode 100644 drivers/video/jz4740_fb.c create mode 100644 include/linux/jz4740_fb.h diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index a9f9e5e..eae4c8a 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig @@ -2237,6 +2237,15 @@ config FB_BROADSHEET and could also have been called by other names when coupled with a bridge adapter. +config FB_JZ4740 + tristate "JZ4740 LCD framebuffer support" + depends on FB + select FB_SYS_FILLRECT + select FB_SYS_COPYAREA + select FB_SYS_IMAGEBLIT + help + Framebuffer support for the JZ4740 SoC. + source "drivers/video/omap/Kconfig" source "drivers/video/omap2/Kconfig" diff --git a/drivers/video/Makefile b/drivers/video/Makefile index 3c3bf86..fd2df57 100644 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -132,6 +132,7 @@ obj-$(CONFIG_FB_CARMINE) += carminefb.o obj-$(CONFIG_FB_MB862XX) += mb862xx/ obj-$(CONFIG_FB_MSM) += msm/ obj-$(CONFIG_FB_NUC900) += nuc900fb.o +obj-$(CONFIG_FB_JZ4740) += jz4740_fb.o # Platform or fallback drivers go here obj-$(CONFIG_FB_UVESA) += uvesafb.o diff --git a/drivers/video/jz4740_fb.c b/drivers/video/jz4740_fb.c new file mode 100644 index 0000000..8d03181 --- /dev/null +++ b/drivers/video/jz4740_fb.c @@ -0,0 +1,817 @@ +/* + * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> + * JZ4740 SoC ...
Hi Andrew v2 of this patch has been around for two weeks without any comments. I've fixed all the issues you had with v1. If you this version is ok, an Acked-By would be nice :) Thanks - Lars --
On Mon, 05 Jul 2010 00:27:25 +0200 I don't do acks - I already have enough to be blamed for. I'd merge it if asked to though. Although I might whine about inappropriate use of ENOENT, which means "No such file or directory". --
That is due to to many bad examples, I guess. Would using ENXIO instead keep you from whining? - Lars --
Sounds a bit better. It's hardly a huge issue though. --
Hi Lars, Andrew, Out of curiosity, why FB_SYS and not FB_CFB? The users of FB_SYS are drivers that use virtual memory for their framebuffer. I didn't see Just a minor nit, the typical naming in fbdev appears to be I see a lot of register defines below. Is there any reason why they shouldn't go in above j*fb.h? Also, I'm not sure if linux/j*.h is the best place. I think most fbdev drivers place their headers in drivers/video itself unless they need to share something driver specific with userspace which is rare. Is there a specific reason why The lcd type serial looks interesting to me. It'd be nice to have some It'd be nice to know the reasoning for the SetPageReserved. Thanks, jaya --
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 The register definitions are only used by the driver, so there is no reason why they should be in a different file. The header file defines the platform data struct for this driver. But I guess the Uhm, its a standard 8bit serial connection. 3 channels (R,G,B) and 8 bits per It's to make sure that the framebuffer memory is not swapped out. But actually I'm not sure if it's really needed, since I'm not that familar with how the swap management code choose pages to swap out. But there are similar drivers seem to do Thanks for reviewing, - - Lars -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkw3QN8ACgkQBX4mSR26RiNg3wCfeg7uauWGHNx5z9StBcbloOrj luYAnjjGFuYcD8O7zBKjlzOHOMD8PPuJ =qrO3 -----END PGP SIGNATURE----- --
This patch adds support for the LCD controller on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: linux-fbdev@vger.kernel.org -- Changes since v1 - Use __packed instead of __attribute__((packed)) - Make jzfb_fix const - Only set mode in set_par if it has changed Changes since v2 - Add support for special tft type lcds - Move include file from include/linux to arch/mips/include/asm/mach-jz4740 --- arch/mips/include/asm/mach-jz4740/jz4740_fb.h | 67 ++ drivers/video/Kconfig | 9 + drivers/video/Makefile | 1 + drivers/video/jz4740_fb.c | 847 +++++++++++++++++++++++++ 4 files changed, 924 insertions(+), 0 deletions(-) create mode 100644 arch/mips/include/asm/mach-jz4740/jz4740_fb.h create mode 100644 drivers/video/jz4740_fb.c diff --git a/arch/mips/include/asm/mach-jz4740/jz4740_fb.h b/arch/mips/include/asm/mach-jz4740/jz4740_fb.h new file mode 100644 index 0000000..6a50e6f --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/jz4740_fb.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2009, Lars-Peter Clausen <lars@metafoo.de> + * + * 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 __ASM_MACH_JZ4740_JZ4740_FB_H__ +#define __ASM_MACH_JZ4740_JZ4740_FB_H__ + +#include <linux/fb.h> + +enum jz4740_fb_lcd_type { + JZ_LCD_TYPE_GENERIC_16_BIT = 0, + JZ_LCD_TYPE_GENERIC_18_BIT = 0 | (1 << 4), + JZ_LCD_TYPE_SPECIAL_TFT_1 = 1, + JZ_LCD_TYPE_SPECIAL_TFT_2 = 2, + JZ_LCD_TYPE_SPECIAL_TFT_3 = ...
This patch adds support for the NAND controller on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: David Woodhouse <dwmw2@infradead.org> Cc: linux-mtd@lists.infradead.org --- Changes since v1 - JZ4740: Remove debug macro - Fix platform driver remove callback - Add custom nand read/write callback since we need to support more then 64 ecc bytes --- drivers/mtd/nand/Kconfig | 6 + drivers/mtd/nand/Makefile | 1 + drivers/mtd/nand/jz4740_nand.c | 474 +++++++++++++++++++++++++++++++++++++++ include/linux/mtd/jz4740_nand.h | 34 +++ 4 files changed, 515 insertions(+), 0 deletions(-) create mode 100644 drivers/mtd/nand/jz4740_nand.c create mode 100644 include/linux/mtd/jz4740_nand.h diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig index ffc3720..362d177 100644 --- a/drivers/mtd/nand/Kconfig +++ b/drivers/mtd/nand/Kconfig @@ -526,4 +526,10 @@ config MTD_NAND_NUC900 This enables the driver for the NAND Flash on evaluation board based on w90p910 / NUC9xx. +config MTD_NAND_JZ4740 + tristate "Support for JZ4740 SoC NAND controller" + depends on MACH_JZ4740 + help + Enables support for NAND Flash on JZ4740 SoC based boards. + endif # MTD_NAND diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile index e8ab884..ac83dcd 100644 --- a/drivers/mtd/nand/Makefile +++ b/drivers/mtd/nand/Makefile @@ -46,5 +46,6 @@ obj-$(CONFIG_MTD_NAND_NOMADIK) += nomadik_nand.o obj-$(CONFIG_MTD_NAND_BCM_UMI) += bcm_umi_nand.o nand_bcm_umi.o obj-$(CONFIG_MTD_NAND_MPC5121_NFC) += mpc5121_nfc.o obj-$(CONFIG_MTD_NAND_RICOH) += r852.o +obj-$(CONFIG_MTD_NAND_JZ4740) += jz4740_nand.o nand-objs := nand_base.o nand_bbt.o diff --git a/drivers/mtd/nand/jz4740_nand.c b/drivers/mtd/nand/jz4740_nand.c new file mode 100644 index 0000000..8c55f8a --- /dev/null +++ b/drivers/mtd/nand/jz4740_nand.c @@ -0,0 +1,474 @@ +/* + * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> + * JZ4740 SoC NAND ...
Do you really have to add your platform data strucutre to "inlculde/mtd" ? That is quite global namespace, and ideally only things like user-space interface and "public" interface of the MTD subsystem should live there. Can you keep this somewhere in mips architecture directory? -- Best Regards, Artem Bityutskiy (Артём Битюцкий) --
Hi Hm, ok, I see. I'll move it to arch/mips/include/asm/mach-jz4740/ then. But I guess I should move the headers for all the other jz4740 driver to the same directory as well. On the other hand I'm wondering where on would put headers for non platform specific drivers? - Lars --
If we are talking about MTD, then drivers/mtd ? -- Best Regards, Artem Bityutskiy (Артём Битюцкий) --
No, what I meant was header defining platform data structs and such. And what I wanted to get at is an answer to why driver header files are put in different directories while the driver files themselves are all keep in the same directory. (drivers of the same subsystem that is) - Lars --
To be frank I do not know, I did not look at the whole picture, just at the MTD part :-) -- Best Regards, Artem Bityutskiy (Артём Битюцкий) --
This patch adds support for the NAND controller on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: David Woodhouse <dwmw2@infradead.org> Cc: linux-mtd@lists.infradead.org -- Changes since v1 - JZ4740: Remove debug macro - Fix platform driver remove callback - Add custom nand read/write callback since we need to support more then 64 ecc bytes Changes since v2 - Fix potential deadlock that can happen when the hardware is broken - Move include file from include/linux/mtd/ to arch/mips/include/asm/mach-jz4740/ - {Enable,Disable} NAND-chip in {probe,remove} - Supply memory bank address through platform resource --- arch/mips/include/asm/mach-jz4740/jz4740_nand.h | 34 ++ drivers/mtd/nand/Kconfig | 6 + drivers/mtd/nand/Makefile | 1 + drivers/mtd/nand/jz4740_nand.c | 516 +++++++++++++++++++++++ 4 files changed, 557 insertions(+), 0 deletions(-) create mode 100644 arch/mips/include/asm/mach-jz4740/jz4740_nand.h create mode 100644 drivers/mtd/nand/jz4740_nand.c diff --git a/arch/mips/include/asm/mach-jz4740/jz4740_nand.h b/arch/mips/include/asm/mach-jz4740/jz4740_nand.h new file mode 100644 index 0000000..bb5b9a4 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/jz4740_nand.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> + * JZ4740 SoC NAND controller driver + * + * 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 __ASM_MACH_JZ4740_JZ4740_NAND_H__ +#define ...
Do you expect this patch to go in via the MTD tree? I guess it might be better if it was MIPS tree? -- Best Regards, Artem Bityutskiy (Артём Битюцкий) --
Hi Yes, letting it go through the MIPS tree is the plan. - Lars --
This patch adds support for the mmc controller on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: linux-mmc@vger.kernel.org --- Changes since v1 - Do not request IRQ with IRQF_DISABLED since it is a noop now - Use a generous slack for the timeout timer. It does not need to be accurate. --- drivers/mmc/host/Kconfig | 8 + drivers/mmc/host/Makefile | 1 + drivers/mmc/host/jz4740_mmc.c | 993 ++++++++++++++++++++++++++++++++++++++++ include/linux/mmc/jz4740_mmc.h | 15 + 4 files changed, 1017 insertions(+), 0 deletions(-) create mode 100644 drivers/mmc/host/jz4740_mmc.c create mode 100644 include/linux/mmc/jz4740_mmc.h diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig index f06d06e..546fc49 100644 --- a/drivers/mmc/host/Kconfig +++ b/drivers/mmc/host/Kconfig @@ -81,6 +81,14 @@ config MMC_RICOH_MMC If unsure, say Y. +config MMC_JZ4740 + tristate "JZ4740 SD/Multimedia Card Interface support" + depends on MACH_JZ4740 + help + This selects the Ingenic Z4740 SD/Multimedia card Interface. + If you have an ngenic platform with a Multimedia Card slot, + say Y or M here. + config MMC_SDHCI_OF tristate "SDHCI support on OpenFirmware platforms" depends on MMC_SDHCI && PPC_OF diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile index e30c2ee..f4e53c9 100644 --- a/drivers/mmc/host/Makefile +++ b/drivers/mmc/host/Makefile @@ -36,6 +36,7 @@ obj-$(CONFIG_MMC_CB710) += cb710-mmc.o obj-$(CONFIG_MMC_VIA_SDMMC) += via-sdmmc.o obj-$(CONFIG_SDH_BFIN) += bfin_sdh.o obj-$(CONFIG_MMC_SH_MMCIF) += sh_mmcif.o +obj-$(CONFIG_MMC_JZ4740) += jz4740_mmc.o obj-$(CONFIG_MMC_SDHCI_OF) += sdhci-of.o sdhci-of-y := sdhci-of-core.o diff --git a/drivers/mmc/host/jz4740_mmc.c b/drivers/mmc/host/jz4740_mmc.c new file mode 100644 index 0000000..5b73944 --- /dev/null +++ b/drivers/mmc/host/jz4740_mmc.c @@ -0,0 +1,993 @@ +/* + * Copyright (C) ...
Hey Lars-Peter, Taking a spinlock and disabling interrupts seems like too much overhead to simply test and clear a bit. Wouldn't it be better to implement this with test_and_clear_bit(), which on MIPS will likely be implemented with ll/sc instructions? It's particularly important to keep this Am I right in thinking that this spinlock guards against the interrupt handler and the timeout function running at the same time? So it's not really possible to drop the spinlock from here? --
Hi Yes, at least that is what it was meant for. But it was there before the waiting bit and right now I can not construct any code paths that could lead to jz4740_mmc_request_done from two paths at the same time. The timer wont call it if the waiting bit is not set and the irq handler won't wake the threaded irq handler if the waiting bit is not set. I'll think a bit more about it and eventually drop the spinlock here. Thanks for your review :) - Lars --
This patch adds support for the mmc controller on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Matt Fleming <matt@console-pimps.org> Cc: linux-mmc@vger.kernel.org --- Changes since v1 - Do not request IRQ with IRQF_DISABLED since it is a noop now - Use a generous slack for the timeout timer. It does not need to be accurate. Changes since v2 - Use sg_mapping_to iterate over sg elements in mmc read and write functions - Use bitops instead of a spinlock and a variable for testing whether a request has been finished. - Rework irq and timeout handling in order to get rid of locking in hot paths --- drivers/mmc/host/Kconfig | 8 + drivers/mmc/host/Makefile | 1 + drivers/mmc/host/jz4740_mmc.c | 969 ++++++++++++++++++++++++++++++++++++++++ include/linux/mmc/jz4740_mmc.h | 15 + 4 files changed, 993 insertions(+), 0 deletions(-) create mode 100644 drivers/mmc/host/jz4740_mmc.c create mode 100644 include/linux/mmc/jz4740_mmc.h diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig index f06d06e..546fc49 100644 --- a/drivers/mmc/host/Kconfig +++ b/drivers/mmc/host/Kconfig @@ -81,6 +81,14 @@ config MMC_RICOH_MMC If unsure, say Y. +config MMC_JZ4740 + tristate "JZ4740 SD/Multimedia Card Interface support" + depends on MACH_JZ4740 + help + This selects the Ingenic Z4740 SD/Multimedia card Interface. + If you have an ngenic platform with a Multimedia Card slot, + say Y or M here. + config MMC_SDHCI_OF tristate "SDHCI support on OpenFirmware platforms" depends on MMC_SDHCI && PPC_OF diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile index e30c2ee..f4e53c9 100644 --- a/drivers/mmc/host/Makefile +++ b/drivers/mmc/host/Makefile @@ -36,6 +36,7 @@ obj-$(CONFIG_MMC_CB710) += cb710-mmc.o obj-$(CONFIG_MMC_VIA_SDMMC) += via-sdmmc.o obj-$(CONFIG_SDH_BFIN) += bfin_sdh.o obj-$(CONFIG_MMC_SH_MMCIF) += ...
Acked-by: Matt Fleming <matt@console-pimps.org> Are you planning on maintaining this driver? If so, it'd be a good idea to update MAINTAINERS. --
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Thanks for reviewing the patch. I guess I should send a MAINTAINERS patch which adds entries for all of the JZ4740 drivers. - - Lars -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkwsuJUACgkQBX4mSR26RiNHVgCfTq+tc2I1QBniqijyUjNDxPIX GsEAn1xgPWz+L0uqHWthzJ+lMtFaUBtY =nVt9 -----END PGP SIGNATURE----- --
On Mon, 28 Jun 2010 03:20:41 +0200 This guy's too big to inline. Recent gcc's know that and they tend to The bitfields will all share the same word, so modification of one field can race against modification of another field. Hence some form of locking which covers *all* the bitfields is needed. Is that a problem in this driver? --
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Hm, right. It doesn't hurt though. I'll do some tests and to try to come up with a Its very unlikely that these will ever timeout. But right, to be on the safe, there Actually, even without the inline attribute and compiling with -Os gcc will inline They are all read-only in the driver. Thanks for reviewing the patch - - Lars -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkwsuDQACgkQBX4mSR26RiOiMACeMMNj4koCYFAUnxyM0LBr+wOZ x6oAnizk5CaAvZjQ2doXrD6ZYgDeNjSr =92D2 -----END PGP SIGNATURE----- --
This patch adds support for the mmc controller on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Matt Fleming <matt@console-pimps.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Matt Fleming <matt@console-pimps.org> Cc: linux-mmc@vger.kernel.org --- Changes since v1 - Do not request IRQ with IRQF_DISABLED since it is a noop now - Use a generous slack for the timeout timer. It does not need to be accurate. Changes since v2 - Use sg_mapping_to iterate over sg elements in mmc read and write functions - Use bitops instead of a spinlock and a variable for testing whether a request has been finished. - Rework irq and timeout handling in order to get rid of locking in hot paths Changes since v3 - Drastically decrease IRQ poll timeout. Now when the poll timeout is reached the IRQ which was polled is enabled. A variable keeps track of what state the driver is in and what has to be done next when the IRQ handler is entered again. By doing so busy looping is reduced, but overall performance can be maintained. - Move header file from include/linux/mmc to arch/mips/include/asm/mach-jz4740 --- arch/mips/include/asm/mach-jz4740/jz4740_mmc.h | 15 + drivers/mmc/host/Kconfig | 8 + drivers/mmc/host/Makefile | 1 + drivers/mmc/host/jz4740_mmc.c | 1024 ++++++++++++++++++++++++ 4 files changed, 1048 insertions(+), 0 deletions(-) create mode 100644 arch/mips/include/asm/mach-jz4740/jz4740_mmc.h create mode 100644 drivers/mmc/host/jz4740_mmc.c diff --git a/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h b/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h new file mode 100644 index 0000000..8543f43 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h @@ -0,0 +1,15 @@ +#ifndef __LINUX_MMC_JZ4740_MMC +#define __LINUX_MMC_JZ4740_MMC + +struct jz4740_mmc_platform_data { + int gpio_power; + int gpio_card_detect; + int gpio_read_only; + unsigned ...
What tree has the kconfig symbol MACH_JZ4740 in it? I can't seem to find it... Should the depends also say anything about GPIO? --
Hi None yet, mips hopefully soon. Version 1 of this patch was part of a series adding support for the JZ4740. Since the jz4740 platform code provides the gpio functions I don't think it is Thanks for reviewing - Lars --
This patch adds support for the mmc controller on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Matt Fleming <matt@console-pimps.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Matt Fleming <matt@console-pimps.org> Cc: linux-mmc@vger.kernel.org --- Changes since v1 - Do not request IRQ with IRQF_DISABLED since it is a noop now - Use a generous slack for the timeout timer. It does not need to be accurate. Changes since v2 - Use sg_mapping_to iterate over sg elements in mmc read and write functions - Use bitops instead of a spinlock and a variable for testing whether a request has been finished. - Rework irq and timeout handling in order to get rid of locking in hot paths Changes since v3 - Drastically decrease IRQ poll timeout. Now when the poll timeout is reached the IRQ which was polled is enabled. A variable keeps track of what state the driver is in and what has to be done next when the IRQ handler is entered again. By doing so busy looping is reduced, but overall performance can be maintained. - Move header file from include/linux/mmc to arch/mips/include/asm/mach-jz4740 Changes since v4 - Rework Kconfig entry --- arch/mips/include/asm/mach-jz4740/jz4740_mmc.h | 15 + drivers/mmc/host/Kconfig | 9 + drivers/mmc/host/Makefile | 1 + drivers/mmc/host/jz4740_mmc.c | 1024 ++++++++++++++++++++++++ 4 files changed, 1049 insertions(+), 0 deletions(-) create mode 100644 arch/mips/include/asm/mach-jz4740/jz4740_mmc.h create mode 100644 drivers/mmc/host/jz4740_mmc.c diff --git a/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h b/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h new file mode 100644 index 0000000..8543f43 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h @@ -0,0 +1,15 @@ +#ifndef __LINUX_MMC_JZ4740_MMC +#define __LINUX_MMC_JZ4740_MMC + +struct jz4740_mmc_platform_data { + int gpio_power; + int gpio_card_detect; + int ...
Perhaps it'd be better to use a temporary for --
This patch adds support for the mmc controller on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Matt Fleming <matt@console-pimps.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Matt Fleming <matt@console-pimps.org> Cc: linux-mmc@vger.kernel.org --- Changes since v1 - Do not request IRQ with IRQF_DISABLED since it is a noop now - Use a generous slack for the timeout timer. It does not need to be accurate. Changes since v2 - Use sg_mapping_to iterate over sg elements in mmc read and write functions - Use bitops instead of a spinlock and a variable for testing whether a request has been finished. - Rework irq and timeout handling in order to get rid of locking in hot paths Changes since v3 - Drastically decrease IRQ poll timeout. Now when the poll timeout is reached the IRQ which was polled is enabled. A variable keeps track of what state the driver is in and what has to be done next when the IRQ handler is entered again. By doing so busy looping is reduced, but overall performance can be maintained. - Move header file from include/linux/mmc to arch/mips/include/asm/mach-jz4740 Changes since v4 - Rework Kconfig entry Changes since v5 - Avoid reloading the fifo address before each read/write --- arch/mips/include/asm/mach-jz4740/jz4740_mmc.h | 15 + drivers/mmc/host/Kconfig | 9 + drivers/mmc/host/Makefile | 1 + drivers/mmc/host/jz4740_mmc.c | 1033 ++++++++++++++++++++++++ 4 files changed, 1058 insertions(+), 0 deletions(-) create mode 100644 arch/mips/include/asm/mach-jz4740/jz4740_mmc.h create mode 100644 drivers/mmc/host/jz4740_mmc.c diff --git a/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h b/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h new file mode 100644 index 0000000..8543f43 --- /dev/null +++ b/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h @@ -0,0 +1,15 @@ +#ifndef __LINUX_MMC_JZ4740_MMC +#define ...
On Thu, 15 Jul 2010 23:06:04 +0200 Should this driver have a `depends on GPIOLIB' in Kconfig? --
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 The driver depends on MACH_JZ4740 which selects ARCH_REQUIRE_GPIOLIB, so there already is an implicit depends on GPIOLIB. - - Lars -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEUEARECAAYFAkw/f60ACgkQBX4mSR26RiNexQCfUXt0cqiMqEf17k+z+q6XVwRO ImEAmPKxeyX9ANVasUNL60f51GxKofg= =3NrE -----END PGP SIGNATURE----- --
This patch adds ohci glue code for JZ4740 SoCs ohci module. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Greg Kroah-Hartman <gregkh@suse.de> Cc: David Brownell <dbrownell@users.sourceforge.net> Cc: linux-usb@vger.kernel.org --- Changes since v1 - Do not request IRQ with IRQF_DISABLED, since it is a noop now - Add copyright header --- drivers/usb/Kconfig | 1 + drivers/usb/host/ohci-hcd.c | 5 + drivers/usb/host/ohci-jz4740.c | 276 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 282 insertions(+), 0 deletions(-) create mode 100644 drivers/usb/host/ohci-jz4740.c diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig index 6a58cb1..39a6bfd 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -46,6 +46,7 @@ config USB_ARCH_HAS_OHCI default y if PPC_MPC52xx # MIPS: default y if SOC_AU1X00 + default y if MACH_JZ4740 # SH: default y if CPU_SUBTYPE_SH7720 default y if CPU_SUBTYPE_SH7721 diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index fc57655..05b071c 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -1095,6 +1095,11 @@ MODULE_LICENSE ("GPL"); #define TMIO_OHCI_DRIVER ohci_hcd_tmio_driver #endif +#ifdef CONFIG_MACH_JZ4740 +#include "ohci-jz4740.c" +#define PLATFORM_DRIVER ohci_hcd_jz4740_driver +#endif + #if !defined(PCI_DRIVER) && \ !defined(PLATFORM_DRIVER) && \ !defined(OMAP1_PLATFORM_DRIVER) && \ diff --git a/drivers/usb/host/ohci-jz4740.c b/drivers/usb/host/ohci-jz4740.c new file mode 100644 index 0000000..10e1872 --- /dev/null +++ b/drivers/usb/host/ohci-jz4740.c @@ -0,0 +1,276 @@ +/* + * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> + * + * 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 ...
Acked-by: Greg Kroah-Hartman <gregkh@suse.de> --
This patch adds support for the JZ4740 internal codec. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: Liam Girdwood <lrg@slimlogic.co.uk> Cc: alsa-devel@alsa-project.org --- Changes since v1 - Put Kconfig entry in alphabetic order - Drop codec_set_fmt since the codec supports only one format - Rename "Capture Volume" control to "Master Capture Volume" - Drop unnecessary format checks - Add suspend/resume - Cleanup jz4740_codec_set_bias_level --- sound/soc/codecs/Kconfig | 4 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/jz4740-codec.c | 514 +++++++++++++++++++++++++++++++++++++++ sound/soc/codecs/jz4740-codec.h | 20 ++ 4 files changed, 540 insertions(+), 0 deletions(-) create mode 100644 sound/soc/codecs/jz4740-codec.c create mode 100644 sound/soc/codecs/jz4740-codec.h diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index c37c844..00d347d 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -24,6 +24,7 @@ config SND_SOC_ALL_CODECS select SND_SOC_CQ0093VC if MFD_DAVINCI_VOICECODEC select SND_SOC_CS42L51 if I2C select SND_SOC_CS4270 if I2C + select SND_SOC_JZ4740 if SOC_JZ4740 select SND_SOC_MAX9877 if I2C select SND_SOC_DA7210 if I2C select SND_SOC_PCM3008 @@ -142,6 +143,9 @@ config SND_SOC_CS4270_VD33_ERRATA config SND_SOC_CX20442 tristate +config SND_SOC_JZ4740_CODEC + tristate + config SND_SOC_L3 tristate diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile index 4a9c205..301b131 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile @@ -57,6 +57,7 @@ snd-soc-wm9705-objs := wm9705.o snd-soc-wm9712-objs := wm9712.o snd-soc-wm9713-objs := wm9713.o snd-soc-wm-hubs-objs := wm_hubs.o +snd-soc-jz4740-codec-objs := jz4740-codec.o # Amp snd-soc-max9877-objs := max9877.o @@ -80,6 +81,7 @@ obj-$(CONFIG_SND_SOC_CS4270) += snd-soc-cs4270.o ...
This patch adds support for the JZ4740 internal codec. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: Liam Girdwood <lrg@slimlogic.co.uk> Cc: alsa-devel@alsa-project.org -- Changes since v1 - Put Kconfig entry in alphabetic order - Drop codec_set_fmt since the codec supports only one format - Rename "Capture Volume" control to "Master Capture Volume" - Drop unnecessary format checks - Add suspend/resume - Cleanup jz4740_codec_set_bias_level Changes since v2 - Drop codec prefix from the filename. Note that I keeped it for the object name, because otherwise when build as a module it will clash with the ASoC JZ4740 platform support. --- sound/soc/codecs/Kconfig | 4 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/jz4740.c | 514 +++++++++++++++++++++++++++++++++++++++++++++ sound/soc/codecs/jz4740.h | 20 ++ 4 files changed, 540 insertions(+), 0 deletions(-) create mode 100644 sound/soc/codecs/jz4740.c create mode 100644 sound/soc/codecs/jz4740.h diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index c37c844..00d347d 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -24,6 +24,7 @@ config SND_SOC_ALL_CODECS select SND_SOC_CQ0093VC if MFD_DAVINCI_VOICECODEC select SND_SOC_CS42L51 if I2C select SND_SOC_CS4270 if I2C + select SND_SOC_JZ4740 if SOC_JZ4740 select SND_SOC_MAX9877 if I2C select SND_SOC_DA7210 if I2C select SND_SOC_PCM3008 @@ -142,6 +143,9 @@ config SND_SOC_CS4270_VD33_ERRATA config SND_SOC_CX20442 tristate +config SND_SOC_JZ4740_CODEC + tristate + config SND_SOC_L3 tristate diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile index 4a9c205..d8d9eeb 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile @@ -57,6 +57,7 @@ snd-soc-wm9705-objs := wm9705.o snd-soc-wm9712-objs := wm9712.o snd-soc-wm9713-objs := wm9713.o snd-soc-wm-hubs-objs := ...
On Sat, Jun 19, 2010 at 04:49:53PM +0200, Lars-Peter Clausen wrote: You've got these set up on the CODEC platform device rather than the ASoC CODEC. This means that the suspend and resume will happen out of sequence with the rest of the ASoC suspend and resume which could result in poor performance or bugs if the device is suspended while the core still thinks it's active. For example, ASoC will use DAPM to shut down the CODEC and it's possible that the CODEC could be suspended (and generate an audible noise) while an external amplifier is still powered, worsening the problem. --
This patch adds support for the JZ4740 internal codec. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: Liam Girdwood <lrg@slimlogic.co.uk> Cc: alsa-devel@alsa-project.org --- Changes since v1 - Put Kconfig entry in alphabetic order - Drop codec_set_fmt since the codec supports only one format - Rename "Capture Volume" control to "Master Capture Volume" - Drop unnecessary format checks - Add suspend/resume - Cleanup jz4740_codec_set_bias_level Changes since v2 - Drop codec prefix from the filename. Note that I keeped it for the object name, because otherwise when build as a module it will clash with the ASoC JZ4740 platform support. Changes since v3 - Hook up suspend/resume callbacks to the codec instead of the platform device --- sound/soc/codecs/Kconfig | 4 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/jz4740.c | 511 +++++++++++++++++++++++++++++++++++++++++++++ sound/soc/codecs/jz4740.h | 20 ++ 4 files changed, 537 insertions(+), 0 deletions(-) create mode 100644 sound/soc/codecs/jz4740.c create mode 100644 sound/soc/codecs/jz4740.h diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index c37c844..00d347d 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -24,6 +24,7 @@ config SND_SOC_ALL_CODECS select SND_SOC_CQ0093VC if MFD_DAVINCI_VOICECODEC select SND_SOC_CS42L51 if I2C select SND_SOC_CS4270 if I2C + select SND_SOC_JZ4740 if SOC_JZ4740 select SND_SOC_MAX9877 if I2C select SND_SOC_DA7210 if I2C select SND_SOC_PCM3008 @@ -142,6 +143,9 @@ config SND_SOC_CS4270_VD33_ERRATA config SND_SOC_CX20442 tristate +config SND_SOC_JZ4740_CODEC + tristate + config SND_SOC_L3 tristate diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile index 4a9c205..d8d9eeb 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile @@ -57,6 +57,7 @@ snd-soc-wm9705-objs := wm9705.o ...
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk> -- Freelance Developer, SlimLogic Ltd ASoC and Voltage Regulator Maintainer. http://www.slimlogic.co.uk --
This patch adds a MFD driver for the JZ4740 ADC unit. The driver is used to demultiplex IRQs and synchronize access to shared registers between the battery, hwmon and (future) touchscreen driver. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Samuel Ortiz <sameo@linux.intel.com> --- drivers/mfd/Kconfig | 8 + drivers/mfd/Makefile | 1 + drivers/mfd/jz4740-adc.c | 392 ++++++++++++++++++++++++++++++++++++++++++++ include/linux/jz4740-adc.h | 32 ++++ 4 files changed, 433 insertions(+), 0 deletions(-) create mode 100644 drivers/mfd/jz4740-adc.c create mode 100644 include/linux/jz4740-adc.h diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 9da0e50..9cacc39 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -482,6 +482,14 @@ config MFD_JANZ_CMODIO host many different types of MODULbus daughterboards, including CAN and GPIO controllers. +config MFD_JZ4740_ADC + tristate "Support for the JZ4740 SoC ADC core" + select MFD_CORE + depends on MACH_JZ4740 + help + Say yes here if you want support for the ADC unit in the JZ4740 SoC. + This driver is necessary for jz4740-battery and jz4740-hwmon driver. + endif # MFD_SUPPORT menu "Multimedia Capabilities Port drivers" diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index fb503e7..a1a2765 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -71,3 +71,4 @@ obj-$(CONFIG_PMIC_ADP5520) += adp5520.o obj-$(CONFIG_LPC_SCH) += lpc_sch.o obj-$(CONFIG_MFD_RDC321X) += rdc321x-southbridge.o obj-$(CONFIG_MFD_JANZ_CMODIO) += janz-cmodio.o +obj-$(CONFIG_MFD_JZ4740_ADC) += jz4740-adc.o diff --git a/drivers/mfd/jz4740-adc.c b/drivers/mfd/jz4740-adc.c new file mode 100644 index 0000000..cac8a52 --- /dev/null +++ b/drivers/mfd/jz4740-adc.c @@ -0,0 +1,392 @@ +/* + * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> + * JZ4740 SoC ADC driver + * + * This program is free software; you can redistribute it and/or modify it + * ...
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Samuel Could you take a look at this driver and say whether this driver looks ok or not? Thanks - - Lars -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkwxD5AACgkQBX4mSR26RiN/pgCfbdAlLjaN4Ot91yNDkNs+27TX f90AoIFB5pXsuLK+6lQbqq5WUt8cOhlM =wFGF -----END PGP SIGNATURE----- --
Hi Lars, Sorry for the review delay. This one got lost in my inbox :-/ I'm not familiar with your platform clock framework, but shouldn't the Please return the mfd_add_devices return value. Cheers, Samuel. -- Intel Open Source Technology Centre http://oss.intel.com/ --
Hi I wonder if it would make sense to optimize for_each_set_bit for small builtin The ADC clock is the only clock on this platform which is shared between multiple devices so I refrained from adding the refcounting to the core for now. But to be strictly complaint with the clock API as defined in linux/clk.h the implementation Thanks for reviewing the patch - Lars --
I can't see what leaving the refcount handling to drivers could bring compared to a centralized implementation. But that's your platform, either way is fine with me as far as this MFD driver is concerned. Cheers, Samuel. -- Intel Open Source Technology Centre http://oss.intel.com/ --
This patch adds a MFD driver for the JZ4740 ADC unit. The driver is used to demultiplex IRQs and synchronize access to shared registers between the battery, hwmon and (future) touchscreen driver. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Samuel Ortiz <sameo@linux.intel.com> --- Changes since v2 - Use atmic_t for clock ref-counting. - Add a comment why ref-counting is done in the driver and not in the clock framework. - Return more appropriate error codes when resources are missing. - Return result of mfd_add_devices at the end of the drivers probe function. --- drivers/mfd/Kconfig | 8 + drivers/mfd/Makefile | 1 + drivers/mfd/jz4740-adc.c | 384 ++++++++++++++++++++++++++++++++++++++++++++ include/linux/jz4740-adc.h | 32 ++++ 4 files changed, 425 insertions(+), 0 deletions(-) create mode 100644 drivers/mfd/jz4740-adc.c create mode 100644 include/linux/jz4740-adc.h diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 3f65dd0..2cde665 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -524,6 +524,14 @@ config MFD_JANZ_CMODIO host many different types of MODULbus daughterboards, including CAN and GPIO controllers. +config MFD_JZ4740_ADC + tristate "Support for the JZ4740 SoC ADC core" + select MFD_CORE + depends on MACH_JZ4740 + help + Say yes here if you want support for the ADC unit in the JZ4740 SoC. + This driver is necessary for jz4740-battery and jz4740-hwmon driver. + endif # MFD_SUPPORT menu "Multimedia Capabilities Port drivers" diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 130c5f0..8a751dd 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -73,3 +73,4 @@ obj-$(CONFIG_PMIC_ADP5520) += adp5520.o obj-$(CONFIG_LPC_SCH) += lpc_sch.o obj-$(CONFIG_MFD_RDC321X) += rdc321x-southbridge.o obj-$(CONFIG_MFD_JANZ_CMODIO) += janz-cmodio.o +obj-$(CONFIG_MFD_JZ4740_ADC) += jz4740-adc.o diff --git a/drivers/mfd/jz4740-adc.c ...
Hi Lars, Patch applied, many thanks. Cheers, Samuel. -- Intel Open Source Technology Centre http://oss.intel.com/ --
This patch adds ASoC support for JZ4740 SoCs I2S module. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: Liam Girdwood <lrg@slimlogic.co.uk> Cc: alsa-devel@alsa-project.org --- Changes since v1 - i2s: Properly free and disable clocks in case of an error in probe - i2s: Drop unnecessary format checks which are already done in the core - i2s: Drop set_clkdiv - pcm: Refactor dma buffer position handling to be better comprehensible - Cleanup and fix Kconfig --- sound/soc/Kconfig | 1 + sound/soc/Makefile | 1 + sound/soc/jz4740/Kconfig | 14 + sound/soc/jz4740/Makefile | 9 + sound/soc/jz4740/jz4740-i2s.c | 540 +++++++++++++++++++++++++++++++++++++++++ sound/soc/jz4740/jz4740-i2s.h | 18 ++ sound/soc/jz4740/jz4740-pcm.c | 352 +++++++++++++++++++++++++++ sound/soc/jz4740/jz4740-pcm.h | 22 ++ 8 files changed, 957 insertions(+), 0 deletions(-) create mode 100644 sound/soc/jz4740/Kconfig create mode 100644 sound/soc/jz4740/Makefile create mode 100644 sound/soc/jz4740/jz4740-i2s.c create mode 100644 sound/soc/jz4740/jz4740-i2s.h create mode 100644 sound/soc/jz4740/jz4740-pcm.c create mode 100644 sound/soc/jz4740/jz4740-pcm.h diff --git a/sound/soc/Kconfig b/sound/soc/Kconfig index d35f848..7137a9a 100644 --- a/sound/soc/Kconfig +++ b/sound/soc/Kconfig @@ -39,6 +39,7 @@ source "sound/soc/s3c24xx/Kconfig" source "sound/soc/s6000/Kconfig" source "sound/soc/sh/Kconfig" source "sound/soc/txx9/Kconfig" +source "sound/soc/jz4740/Kconfig" # Supported codecs source "sound/soc/codecs/Kconfig" diff --git a/sound/soc/Makefile b/sound/soc/Makefile index 97661b7..d131999 100644 --- a/sound/soc/Makefile +++ b/sound/soc/Makefile @@ -17,3 +17,4 @@ obj-$(CONFIG_SND_SOC) += s3c24xx/ obj-$(CONFIG_SND_SOC) += s6000/ obj-$(CONFIG_SND_SOC) += sh/ obj-$(CONFIG_SND_SOC) += txx9/ +obj-$(CONFIG_SND_SOC) += jz4740/ diff --git a/sound/soc/jz4740/Kconfig ...
This patch adds ASoC support for JZ4740 SoCs I2S module. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: Liam Girdwood <lrg@slimlogic.co.uk> Cc: alsa-devel@alsa-project.org alsa: ASoC: jz4740-i2s: Properly free and disable clocks in case of an error -- Changes since v1 - i2s: Properly free and disable clocks in case of an error in probe - i2s: Drop unnecessary format checks which are already done in the core - i2s: Drop set_clkdiv - pcm: Refactor dma buffer position handling to be better comprehensible - Cleanup and fix Kconfig Changes since v2 - Use a platform device to register the snd_soc_platform --- sound/soc/Kconfig | 1 + sound/soc/Makefile | 1 + sound/soc/jz4740/Kconfig | 14 + sound/soc/jz4740/Makefile | 9 + sound/soc/jz4740/jz4740-i2s.c | 540 +++++++++++++++++++++++++++++++++++++++++ sound/soc/jz4740/jz4740-i2s.h | 18 ++ sound/soc/jz4740/jz4740-pcm.c | 373 ++++++++++++++++++++++++++++ sound/soc/jz4740/jz4740-pcm.h | 22 ++ 8 files changed, 978 insertions(+), 0 deletions(-) create mode 100644 sound/soc/jz4740/Kconfig create mode 100644 sound/soc/jz4740/Makefile create mode 100644 sound/soc/jz4740/jz4740-i2s.c create mode 100644 sound/soc/jz4740/jz4740-i2s.h create mode 100644 sound/soc/jz4740/jz4740-pcm.c create mode 100644 sound/soc/jz4740/jz4740-pcm.h diff --git a/sound/soc/Kconfig b/sound/soc/Kconfig index d35f848..7137a9a 100644 --- a/sound/soc/Kconfig +++ b/sound/soc/Kconfig @@ -39,6 +39,7 @@ source "sound/soc/s3c24xx/Kconfig" source "sound/soc/s6000/Kconfig" source "sound/soc/sh/Kconfig" source "sound/soc/txx9/Kconfig" +source "sound/soc/jz4740/Kconfig" # Supported codecs source "sound/soc/codecs/Kconfig" diff --git a/sound/soc/Makefile b/sound/soc/Makefile index 97661b7..d131999 100644 --- a/sound/soc/Makefile +++ b/sound/soc/Makefile @@ -17,3 +17,4 @@ obj-$(CONFIG_SND_SOC) += s3c24xx/ ...
This patch adds support for reading the ADCIN pin of ADC unit on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Jonathan Cameron <kernel@jic23.retrosnub.co.uk> Cc: lm-sensors@lm-sensors.org --- Changes since v1 - Move ADC core access synchronizing from the HWMON driver to a MFD driver. The ADC driver now only reads the adcin value. --- drivers/hwmon/Kconfig | 11 +++ drivers/hwmon/Makefile | 1 + drivers/hwmon/jz4740-hwmon.c | 206 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 218 insertions(+), 0 deletions(-) create mode 100644 drivers/hwmon/jz4740-hwmon.c diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 569082c..51fc2f6 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig @@ -446,6 +446,17 @@ config SENSORS_IT87 This driver can also be built as a module. If so, the module will be called it87. +config SENSORS_JZ4740 + tristate "Ingenic JZ4740 SoC ADC driver" + depends on MACH_JZ4740 + help + If you say yes here you get support for the Ingenic JZ4740 SoC ADC core. + It is required for the JZ4740 battery and touchscreen driver and is used + to synchronize access to the adc module between those two. + + This driver can also be build as a module. If so, the module will be + called jz4740-adc. + config SENSORS_LM63 tristate "National Semiconductor LM63 and LM64" depends on I2C diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile index bca0d45..dffbdff 100644 --- a/drivers/hwmon/Makefile +++ b/drivers/hwmon/Makefile @@ -55,6 +55,7 @@ obj-$(CONFIG_SENSORS_I5K_AMB) += i5k_amb.o obj-$(CONFIG_SENSORS_IBMAEM) += ibmaem.o obj-$(CONFIG_SENSORS_IBMPEX) += ibmpex.o obj-$(CONFIG_SENSORS_IT87) += it87.o +obj-$(CONFIG_SENSORS_JZ4740) += jz4740-hwmon.o obj-$(CONFIG_SENSORS_K8TEMP) += k8temp.o obj-$(CONFIG_SENSORS_K10TEMP) += k10temp.o obj-$(CONFIG_SENSORS_LIS3LV02D) += lis3lv02d.o hp_accel.o diff --git a/drivers/hwmon/jz4740-hwmon.c ...
What is the unit of "val"? The value returned to userspace must be in You must create a name attribute as well, if you want your device to be -- Jean Delvare --
This patch adds support for reading the ADCIN pin of ADC unit on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: lm-sensors@lm-sensors.org -- Changes since v1 - Move ADC core access synchronizing from the HWMON driver to a MFD driver. The ADC driver now only reads the adcin value. Changes since v2 - Add name sysfs attribute - Report adcin in value in millivolts --- drivers/hwmon/Kconfig | 11 ++ drivers/hwmon/Makefile | 1 + drivers/hwmon/jz4740-hwmon.c | 224 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 236 insertions(+), 0 deletions(-) create mode 100644 drivers/hwmon/jz4740-hwmon.c diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 569082c..51fc2f6 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig @@ -446,6 +446,17 @@ config SENSORS_IT87 This driver can also be built as a module. If so, the module will be called it87. +config SENSORS_JZ4740 + tristate "Ingenic JZ4740 SoC ADC driver" + depends on MACH_JZ4740 + help + If you say yes here you get support for the Ingenic JZ4740 SoC ADC core. + It is required for the JZ4740 battery and touchscreen driver and is used + to synchronize access to the adc module between those two. + + This driver can also be build as a module. If so, the module will be + called jz4740-adc. + config SENSORS_LM63 tristate "National Semiconductor LM63 and LM64" depends on I2C diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile index bca0d45..dffbdff 100644 --- a/drivers/hwmon/Makefile +++ b/drivers/hwmon/Makefile @@ -55,6 +55,7 @@ obj-$(CONFIG_SENSORS_I5K_AMB) += i5k_amb.o obj-$(CONFIG_SENSORS_IBMAEM) += ibmaem.o obj-$(CONFIG_SENSORS_IBMPEX) += ibmpex.o obj-$(CONFIG_SENSORS_IT87) += it87.o +obj-$(CONFIG_SENSORS_JZ4740) += jz4740-hwmon.o obj-$(CONFIG_SENSORS_K8TEMP) += k8temp.o obj-$(CONFIG_SENSORS_K10TEMP) += k10temp.o obj-$(CONFIG_SENSORS_LIS3LV02D) += lis3lv02d.o hp_accel.o diff --git ...
Hi Lars-Peter, Changes look good. A few more comments below; other than these, your driver look good, and I can add it to my hwmon tree and schedule it for Unless you plan to add support for devices with more than 1 voltage input, you can use DEVICE_ATTR() instead of SENSOR_DEVICE_ATTR(), it's -- Jean Delvare --
Hi Great thanks :) As written in the introduction mail to this thread it would be good if the majority of the patches could go through Ralfs tree. So if you don't see any problems doing this, it would be nice if you could give your Acked-By once I sent a updated patch. - Lars --
This patch adds support for reading the ADCIN pin of ADC unit on JZ4740 SoCs. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: lm-sensors@lm-sensors.org -- Changes since v1 - Move ADC core access synchronizing from the HWMON driver to a MFD driver. The ADC driver now only reads the adcin value. Changes since v2 - Add name sysfs attribute - Report adcin in value in millivolts Changes since v3 - Fix Kconfig entry - Add include to completion.h - Break overlong lines - Use DEVICE_ATTR instead of SENSOR_DEVICE_ATTR for the adcin sys file. --- drivers/hwmon/Kconfig | 10 ++ drivers/hwmon/Makefile | 1 + drivers/hwmon/jz4740-hwmon.c | 226 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 237 insertions(+), 0 deletions(-) create mode 100644 drivers/hwmon/jz4740-hwmon.c diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 569082c..a01f32f 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig @@ -446,6 +446,16 @@ config SENSORS_IT87 This driver can also be built as a module. If so, the module will be called it87. +config SENSORS_JZ4740 + tristate "Ingenic JZ4740 SoC ADC driver" + depends on MACH_JZ4740 && MFD_JZ4740_ADC + help + If you say yes here you get support for reading adc values from the ADCIN + pin on Ingenic JZ4740 SoC based boards. + + This driver can also be build as a module. If so, the module will be + called jz4740-hwmon. + config SENSORS_LM63 tristate "National Semiconductor LM63 and LM64" depends on I2C diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile index bca0d45..dffbdff 100644 --- a/drivers/hwmon/Makefile +++ b/drivers/hwmon/Makefile @@ -55,6 +55,7 @@ obj-$(CONFIG_SENSORS_I5K_AMB) += i5k_amb.o obj-$(CONFIG_SENSORS_IBMAEM) += ibmaem.o obj-$(CONFIG_SENSORS_IBMPEX) += ibmpex.o obj-$(CONFIG_SENSORS_IT87) += it87.o +obj-$(CONFIG_SENSORS_JZ4740) += jz4740-hwmon.o obj-$(CONFIG_SENSORS_K8TEMP) += k8temp.o ...
Acked-by: Jean Delvare <khali@linux-fr.org> -- Jean Delvare --
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 ...
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 --
Acked-by: Anton Vorontsov <cbouatmailru@gmail.com> -- Anton Vorontsov email: cbouatmailru@gmail.com irc://irc.freenode.net/bd2 --
This patch adds ASoC support for the qi_lb60 board. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: Liam Girdwood <lrg@slimlogic.co.uk> Cc: alsa-devel@alsa-project.org --- Changes since v1 - Refer to AMP gpios always by their define - Do not try to set codecs format, since the set_fmt callback for the codec was dropped. --- sound/soc/jz4740/Kconfig | 9 ++ sound/soc/jz4740/Makefile | 4 + sound/soc/jz4740/jz4740-pcm.c | 25 ++++++- sound/soc/jz4740/qi_lb60.c | 167 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 sound/soc/jz4740/qi_lb60.c diff --git a/sound/soc/jz4740/Kconfig b/sound/soc/jz4740/Kconfig index 27480f2..5351cba 100644 --- a/sound/soc/jz4740/Kconfig +++ b/sound/soc/jz4740/Kconfig @@ -12,3 +12,12 @@ config SND_JZ4740_SOC_I2S help Say Y if you want to use I2S protocol and I2S codec on Ingenic JZ4740 based boards. + +config SND_JZ4740_SOC_QI_LB60 + tristate "SoC Audio support for Qi LB60" + depends on SND_JZ4740_SOC && JZ4740_QI_LB60 + select SND_JZ4740_SOC_I2S + select SND_SOC_JZ4740_CODEC + help + Say Y if you want to add support for ASoC audio on the Qi LB60 board + a.k.a Qi Ben NanoNote. diff --git a/sound/soc/jz4740/Makefile b/sound/soc/jz4740/Makefile index 1be8d19..be873c1 100644 --- a/sound/soc/jz4740/Makefile +++ b/sound/soc/jz4740/Makefile @@ -7,3 +7,7 @@ snd-soc-jz4740-i2s-objs := jz4740-i2s.o obj-$(CONFIG_SND_JZ4740_SOC) += snd-soc-jz4740.o obj-$(CONFIG_SND_JZ4740_SOC_I2S) += snd-soc-jz4740-i2s.o +# Jz4740 Machine Support +snd-soc-qi-lb60-objs := qi_lb60.o + +obj-$(CONFIG_SND_JZ4740_SOC_QI_LB60) += snd-soc-qi-lb60.o diff --git a/sound/soc/jz4740/jz4740-pcm.c b/sound/soc/jz4740/jz4740-pcm.c index 67b6cf2..ee68d85 100644 --- a/sound/soc/jz4740/jz4740-pcm.c +++ b/sound/soc/jz4740/jz4740-pcm.c @@ -16,6 +16,7 @@ #include <linux/interrupt.h> #include ...
This patch adds ASoC support for the qi_lb60 board. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: Liam Girdwood <lrg@slimlogic.co.uk> Cc: alsa-devel@alsa-project.org -- Changes since v1 - Refer to AMP gpios always by their define - Do not try to set codecs format, since the set_fmt callback for the codec was dropped. Changes since v2 - The codec prefix was removed from jz4740 codec include file - This patch accidentally contained a few bits meant for ASoC JZ4740 platform support patch. Removed them. --- sound/soc/jz4740/Kconfig | 9 +++ sound/soc/jz4740/Makefile | 4 + sound/soc/jz4740/qi_lb60.c | 166 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 179 insertions(+), 0 deletions(-) create mode 100644 sound/soc/jz4740/qi_lb60.c diff --git a/sound/soc/jz4740/Kconfig b/sound/soc/jz4740/Kconfig index 27480f2..5351cba 100644 --- a/sound/soc/jz4740/Kconfig +++ b/sound/soc/jz4740/Kconfig @@ -12,3 +12,12 @@ config SND_JZ4740_SOC_I2S help Say Y if you want to use I2S protocol and I2S codec on Ingenic JZ4740 based boards. + +config SND_JZ4740_SOC_QI_LB60 + tristate "SoC Audio support for Qi LB60" + depends on SND_JZ4740_SOC && JZ4740_QI_LB60 + select SND_JZ4740_SOC_I2S + select SND_SOC_JZ4740_CODEC + help + Say Y if you want to add support for ASoC audio on the Qi LB60 board + a.k.a Qi Ben NanoNote. diff --git a/sound/soc/jz4740/Makefile b/sound/soc/jz4740/Makefile index 1be8d19..be873c1 100644 --- a/sound/soc/jz4740/Makefile +++ b/sound/soc/jz4740/Makefile @@ -7,3 +7,7 @@ snd-soc-jz4740-i2s-objs := jz4740-i2s.o obj-$(CONFIG_SND_JZ4740_SOC) += snd-soc-jz4740.o obj-$(CONFIG_SND_JZ4740_SOC_I2S) += snd-soc-jz4740-i2s.o +# Jz4740 Machine Support +snd-soc-qi-lb60-objs := qi_lb60.o + +obj-$(CONFIG_SND_JZ4740_SOC_QI_LB60) += snd-soc-qi-lb60.o diff --git a/sound/soc/jz4740/qi_lb60.c b/sound/soc/jz4740/qi_lb60.c new file mode 100644 index ...
This patch adds support for the qi_lb60 (a.k.a QI Ben NanoNote) clamshell device. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> --- Changes since v1 - Register jz4740 pcm device - Battery device is now registered by the ADC MFD device --- arch/mips/jz4740/Kconfig | 4 + arch/mips/jz4740/Makefile | 2 + arch/mips/jz4740/board-qi_lb60.c | 483 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 489 insertions(+), 0 deletions(-) create mode 100644 arch/mips/jz4740/board-qi_lb60.c diff --git a/arch/mips/jz4740/Kconfig b/arch/mips/jz4740/Kconfig index 8a5e850..3e7141f 100644 --- a/arch/mips/jz4740/Kconfig +++ b/arch/mips/jz4740/Kconfig @@ -1,6 +1,10 @@ choice prompt "Machine type" depends on MACH_JZ4740 + default JZ4740_QI_LB60 + +config JZ4740_QI_LB60 + bool "Qi Hardware Ben NanoNote" endchoice diff --git a/arch/mips/jz4740/Makefile b/arch/mips/jz4740/Makefile index a803ccb..a604eae 100644 --- a/arch/mips/jz4740/Makefile +++ b/arch/mips/jz4740/Makefile @@ -11,6 +11,8 @@ obj-$(CONFIG_DEBUG_FS) += clock-debugfs.o # board specific support +obj-$(CONFIG_JZ4740_QI_LB60) += board-qi_lb60.o + # PM support obj-$(CONFIG_PM) += pm.o diff --git a/arch/mips/jz4740/board-qi_lb60.c b/arch/mips/jz4740/board-qi_lb60.c new file mode 100644 index 0000000..77b191a --- /dev/null +++ b/arch/mips/jz4740/board-qi_lb60.c @@ -0,0 +1,483 @@ +/* + * linux/arch/mips/jz4740/board-qi_lb60.c + * + * QI_LB60 board support + * + * Copyright (c) 2009 Qi Hardware inc., + * Author: Xiangfu Liu <xiangfu@qi-hardware.com> + * Copyright 2010, Lars-Petrer Clausen <lars@metafoo.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 or later + * as published by the Free Software Foundation. + */ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/gpio.h> + +#include <linux/input.h> +#include <linux/gpio_keys.h> +#include ...
This patch adds support for the qi_lb60 (a.k.a QI Ben NanoNote) clamshell device. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> --- Changes since v1 - Register jz4740 pcm device - Battery device is now registered by the ADC MFD device Changes since v2 - Use the pwm-beeper instead of the pwm-leds driver for the piezo - Update include file locations --- arch/mips/jz4740/Kconfig | 4 + arch/mips/jz4740/Makefile | 2 + arch/mips/jz4740/board-qi_lb60.c | 471 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 477 insertions(+), 0 deletions(-) create mode 100644 arch/mips/jz4740/board-qi_lb60.c diff --git a/arch/mips/jz4740/Kconfig b/arch/mips/jz4740/Kconfig index 8a5e850..3e7141f 100644 --- a/arch/mips/jz4740/Kconfig +++ b/arch/mips/jz4740/Kconfig @@ -1,6 +1,10 @@ choice prompt "Machine type" depends on MACH_JZ4740 + default JZ4740_QI_LB60 + +config JZ4740_QI_LB60 + bool "Qi Hardware Ben NanoNote" endchoice diff --git a/arch/mips/jz4740/Makefile b/arch/mips/jz4740/Makefile index a803ccb..a604eae 100644 --- a/arch/mips/jz4740/Makefile +++ b/arch/mips/jz4740/Makefile @@ -11,6 +11,8 @@ obj-$(CONFIG_DEBUG_FS) += clock-debugfs.o # board specific support +obj-$(CONFIG_JZ4740_QI_LB60) += board-qi_lb60.o + # PM support obj-$(CONFIG_PM) += pm.o diff --git a/arch/mips/jz4740/board-qi_lb60.c b/arch/mips/jz4740/board-qi_lb60.c new file mode 100644 index 0000000..5742bb4 --- /dev/null +++ b/arch/mips/jz4740/board-qi_lb60.c @@ -0,0 +1,471 @@ +/* + * linux/arch/mips/jz4740/board-qi_lb60.c + * + * QI_LB60 board support + * + * Copyright (c) 2009 Qi Hardware inc., + * Author: Xiangfu Liu <xiangfu@qi-hardware.com> + * Copyright 2010, Lars-Petrer Clausen <lars@metafoo.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 or later + * as published by the Free Software Foundation. + */ + +#include ...
This patch adds a new cpu type for the JZ4740 to the Linux MIPS architecture code. It also adds the iomem addresses for the different components found on a JZ4740 SoC. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> --- Changes since v1 - Use physical addresses for the base addresses --- arch/mips/include/asm/bootinfo.h | 6 ++++++ arch/mips/include/asm/cpu.h | 9 ++++++++- arch/mips/include/asm/mach-jz4740/base.h | 26 ++++++++++++++++++++++++++ arch/mips/include/asm/mach-jz4740/war.h | 25 +++++++++++++++++++++++++ arch/mips/kernel/cpu-probe.c | 20 ++++++++++++++++++++ arch/mips/mm/tlbex.c | 5 +++++ 6 files changed, 90 insertions(+), 1 deletions(-) create mode 100644 arch/mips/include/asm/mach-jz4740/base.h create mode 100644 arch/mips/include/asm/mach-jz4740/war.h diff --git a/arch/mips/include/asm/bootinfo.h b/arch/mips/include/asm/bootinfo.h index 09eee09..15a8ef0 100644 --- a/arch/mips/include/asm/bootinfo.h +++ b/arch/mips/include/asm/bootinfo.h @@ -71,6 +71,12 @@ #define MACH_LEMOTE_LL2F 7 #define MACH_LOONGSON_END 8 +/* + * Valid machtype for group INGENIC + */ +#define MACH_INGENIC_JZ4730 0 /* JZ4730 SOC */ +#define MACH_INGENIC_JZ4740 1 /* JZ4740 SOC */ + extern char *system_type; const char *get_system_type(void); diff --git a/arch/mips/include/asm/cpu.h b/arch/mips/include/asm/cpu.h index a5acda4..b201a8f 100644 --- a/arch/mips/include/asm/cpu.h +++ b/arch/mips/include/asm/cpu.h @@ -34,7 +34,7 @@ #define PRID_COMP_LSI 0x080000 #define PRID_COMP_LEXRA 0x0b0000 #define PRID_COMP_CAVIUM 0x0d0000 - +#define PRID_COMP_INGENIC 0xd00000 /* * Assigned values for the product ID register. In order to detect a @@ -133,6 +133,12 @@ #define PRID_IMP_CAVIUM_CN52XX 0x0700 /* + * These are the PRID's for when 23:16 == PRID_COMP_INGENIC + */ + +#define PRID_IMP_JZRISC 0x0200 + +/* * Definitions for 7:0 on legacy processors ...
Hi Graham Gower started working on JZ4730 support based on this series some time ago, but had to put a hold on it because he was busy with other things. You both should probably get in contact. There are some parts on the JZ4730 which are similar those on the JZ4740, others are different. So to put support for common parts into a shared source directory is the right approach. But I think this is something that can be done when somebody actually steps forward to implement support for a different JZ47xx SoC. Luckily the code is not set into stone and can be re-factored or renamed once it is required or makes sense to do. Another issue with naming is that while a component might be similar in JZ4730 and JZ4740 it might be completely different in a different JZ47xx SoC. So naming a driver 'jz47xx_driver' instead of 'jz4740_driver' wont work either. - Lars --
so ? call it xx for the common part an exact number for special part. It might be just jugglin with pieces, but getting it better in the first run is always a plus. Thomas. -- Crap can work. Given enough thrust pigs will fly, but it's not necessary a good idea. [ RFC1925, 2.3 ] --
As I said, parts might be common between JZ4730 and JZ4740 but be different to JZ4750 and JZ4760. So JZ47xx wont fit either. Right now there is no practical use to moving things around, and there wont be until somebody who can actually test it starts adding support for a different JZ47XX SoC. - Lars --
great, I like such attitude:-( Thomas. -- Crap can work. Given enough thrust pigs will fly, but it's not necessary a good idea. [ RFC1925, 2.3 ] --
Hi, I have to agree with Thomas here, if your concern is about the naming, then just have a look at the vendor sources and find similarities for what is worth being named JZ47XX and what deserves a name which is more specific. Also, it is much easier to do that factoring job now instead of when there will be 3 or more flavors of that SoC to be supported. Take a look at BCM63xx for instance, it is named like that because it supports 4 different versions of the family SoC, even though the internals of the SoC have been varying a lot, still we support it with a single kernel and what is really family specific is named accordingly from what is chip-specific. -- Florian --
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Well, it's not like somebody who wants to add support for e.g. JZ4730 would start from scratch and add a complete implementation which then has to be merged with JZ4740. You would start adding it on-top of the existing JZ4740 platform support and generalize it where necessary. Renaming is cheap! This is not part of an API thats set into stone... Seriously, it doesn't make any sense to waste time and try to generalize now while it is uncertain if there will be support of a different JZ47xx SoC anytime soon. Furthermore the likelihood of over- or under-generalizing is pretty high if you do not know exactly what you want or what you need. I strongly disagree that it is easier to do the factoring job now. It will be easier when you actually know what requirements you'll have based on hard facts instead of having some loose ideas of what might work and what not. That said, the platform support has been designed with having the idea of support for multiple JZ47XX SoCs at some point. So it will mostly be picking up the components shared between different SoCs and put them in a shared folder (and maybe do a 's/jz4740/jz47xx/g'). But right now there is only JZ4740 support... - - Lars -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkweXl0ACgkQBX4mSR26RiM7hACfRMhD54TJEdI11AgsaaWRiDaK xrYAnRR+0VT3CurJm2Xc9DgC9+bcrFfv =SFR2 -----END PGP SIGNATURE----- --
Hi Thomas I would advice "xburst" instead jzrisc. because the Ingenic call -- Best Regards Xiangfu Liu http://www.openmobilefree.net --
| Greg KH | Og dreams of kernels |
| Jens Axboe | [PATCH 31/33] Fusion: sg chaining support |
| Arnd Bergmann | Re: finding your own dead "CONFIG_" variables |
| Mark Brown | [PATCH 2/2] Subject: natsemi: Allow users to disable workaround for DspCfg reset |
| Tony Breeds | [LGUEST] Look in object dir for .config |
git: | |
| Brian Downing | Re: Git in a Nutshell guide |
| John Benes | Re: master has some toys |
| Matthias Lederhofer | [PATCH 4/7] introduce GIT_WORK_TREE to specify the work tree |
| Alexander Sulfrian | [RFC/PATCH] RE: git calls SSH_ASKPASS even if DISPLAY is not set |
| Junio C Hamano | Re: Rss produced by git is not valid xml? |
