summaryrefslogtreecommitdiffstats
path: root/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook
diff options
context:
space:
mode:
Diffstat (limited to 'extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook')
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0001-ARM-OMAP-add-spi-platform-devices.patch62
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0002-MMA7455L-accelerometer-driver.patch683
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0003-bq27x00_battery-remove-error-message-output.patch53
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0004-bq27x00_battery-add-charged-gpio.patch65
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0005-adf7846-add-more-debugging.patch99
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0006-ads7846-read-max-mix-x-y-from-pdata.patch35
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0007-ads7846-add-settling-delay-to-pdata.patch59
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0008-DSS2-OMAPFB-Translate-X-Y-coordinates-for-the-video-.patch99
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0009-DSS2-Fix-scaling-checks-when-rotation-is-90-or-270-d.patch52
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0010-add-touchbook-hid-driver.patch339
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0011-Make-backlight-controls-accessible-to-users.patch25
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0012-ads7846-don-t-error-out-when-there-s-no-pendown-gpio.patch30
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0013-ASoC-add-driver-for-omap3-touchbook.patch350
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0014-backlight-add-PWM-support.patch126
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0015-Forward-port-TWL4030-BCI-driver-from-2.6.29-to-2.6.3.patch1367
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0016-ARM-OMAP-omap3-touchbook-update-boardfile.patch620
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0017-ARM-OMAP-add-800MHz-OPP-and-remove-125MHz-one.patch48
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/defconfig3043
18 files changed, 7155 insertions, 0 deletions
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0001-ARM-OMAP-add-spi-platform-devices.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0001-ARM-OMAP-add-spi-platform-devices.patch
new file mode 100644
index 00000000..8988fd82
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0001-ARM-OMAP-add-spi-platform-devices.patch
@@ -0,0 +1,62 @@
1From 0031d3fb2d067f4c46e434f5f5c6c14cef2a83a3 Mon Sep 17 00:00:00 2001
2From: Tim Yamin <plasm@roo.me.uk>
3Date: Sat, 11 Apr 2009 13:05:21 -0700
4Subject: [PATCH 01/17] ARM: OMAP: add spi platform devices
5
6---
7 arch/arm/mach-omap2/devices.c | 32 ++++++++++++++++++++++++++++++++
8 1 files changed, 32 insertions(+), 0 deletions(-)
9
10diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
11index 18ad931..ae67ada 100644
12--- a/arch/arm/mach-omap2/devices.c
13+++ b/arch/arm/mach-omap2/devices.c
14@@ -15,6 +15,7 @@
15 #include <linux/platform_device.h>
16 #include <linux/io.h>
17 #include <linux/clk.h>
18+#include <linux/spi/spi_gpio.h>
19
20 #include <mach/hardware.h>
21 #include <asm/mach-types.h>
22@@ -373,6 +374,37 @@ static struct platform_device omap2_mcspi4 = {
23 .platform_data = &omap2_mcspi4_config,
24 },
25 };
26+
27+static struct spi_gpio_platform_data spi3_gpio_platform_data = {
28+ .miso = 132,
29+ .mosi = 131,
30+ .sck = 130,
31+ .num_chipselect = 1,
32+};
33+
34+static struct platform_device spi3_gpio = {
35+ .name = "spi_gpio",
36+ .id = 3,
37+ .dev = {
38+ .platform_data = &spi3_gpio_platform_data,
39+ },
40+};
41+
42+static struct spi_gpio_platform_data spi4_gpio_platform_data = {
43+ .miso = 159,
44+ .mosi = 158,
45+ .sck = 156,
46+ .num_chipselect = 1,
47+};
48+
49+static struct platform_device spi4_gpio = {
50+ .name = "spi_gpio",
51+ .id = 4,
52+ .dev = {
53+ .platform_data = &spi4_gpio_platform_data,
54+ },
55+};
56+
57 #endif
58
59 #ifdef CONFIG_ARCH_OMAP4
60--
611.6.6.1
62
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0002-MMA7455L-accelerometer-driver.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0002-MMA7455L-accelerometer-driver.patch
new file mode 100644
index 00000000..f9c7702e
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0002-MMA7455L-accelerometer-driver.patch
@@ -0,0 +1,683 @@
1From 0c804b06c04a14da575d592c89408537c21fb26b Mon Sep 17 00:00:00 2001
2From: Tim Yamin <plasm@roo.me.uk>
3Date: Tue, 23 Mar 2010 09:52:10 +0100
4Subject: [PATCH 02/17] MMA7455L accelerometer driver
5
6---
7 drivers/input/misc/Kconfig | 9 +
8 drivers/input/misc/Makefile | 1 +
9 drivers/input/misc/mma7455l.c | 615 +++++++++++++++++++++++++++++++++++++++++
10 include/linux/mma7455l.h | 11 +
11 4 files changed, 636 insertions(+), 0 deletions(-)
12 create mode 100644 drivers/input/misc/mma7455l.c
13 create mode 100644 include/linux/mma7455l.h
14
15diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
16index 16ec523..d35ae19 100644
17--- a/drivers/input/misc/Kconfig
18+++ b/drivers/input/misc/Kconfig
19@@ -319,4 +319,13 @@ config INPUT_PCAP
20 To compile this driver as a module, choose M here: the
21 module will be called pcap_keys.
22
23+config INPUT_MMA7455L
24+ tristate "Freescale MMA7455L 3-axis accelerometer"
25+ depends on SPI_MASTER
26+ help
27+ SPI driver for the Freescale MMA7455L 3-axis accelerometer.
28+
29+ The userspace interface is a 3-axis (X/Y/Z) relative movement
30+ Linux input device, reporting REL_[XYZ] events.
31+
32 endif
33diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
34index a8b8485..75b8baa 100644
35--- a/drivers/input/misc/Makefile
36+++ b/drivers/input/misc/Makefile
37@@ -30,4 +30,5 @@ obj-$(CONFIG_INPUT_WINBOND_CIR) += winbond-cir.o
38 obj-$(CONFIG_INPUT_WISTRON_BTNS) += wistron_btns.o
39 obj-$(CONFIG_INPUT_WM831X_ON) += wm831x-on.o
40 obj-$(CONFIG_INPUT_YEALINK) += yealink.o
41+obj-$(CONFIG_INPUT_MMA7455L) += mma7455l.o
42
43diff --git a/drivers/input/misc/mma7455l.c b/drivers/input/misc/mma7455l.c
44new file mode 100644
45index 0000000..b907cc6
46--- /dev/null
47+++ b/drivers/input/misc/mma7455l.c
48@@ -0,0 +1,615 @@
49+/* Linux kernel driver for the Freescale MMA7455L 3-axis accelerometer
50+ *
51+ * Copyright (C) 2009 by Always Innovating, Inc.
52+ * Author: Gregoire Gentil <gregoire@gentil.com>
53+ * Author: Tim Yamin <plasm@roo.me.uk>
54+ * All rights reserved.
55+ *
56+ * This program is free software; you can redistribute it and/or
57+ * modify it under the terms of the GNU General Public License as
58+ * published by the Free Software Foundation; either version 2 of
59+ * the License, or (at your option) any later version.
60+ *
61+ * This program is distributed in the hope that it will be useful,
62+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
63+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
64+ * GNU General Public License for more details.
65+ *
66+ * You should have received a copy of the GNU General Public License
67+ * along with this program; if not, write to the Free Software
68+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
69+ * MA 02111-1307 USA
70+ *
71+ */
72+
73+/*
74+ * What this driver doesn't yet support:
75+ *
76+ * - I2C
77+ * - INT2 handling
78+ * - Pulse detection (and the sysctls to control it)
79+ * - 10-bit measurement
80+ */
81+
82+#include <linux/kernel.h>
83+#include <linux/types.h>
84+#include <linux/module.h>
85+#include <linux/device.h>
86+#include <linux/platform_device.h>
87+#include <linux/delay.h>
88+#include <linux/input.h>
89+#include <linux/irq.h>
90+#include <linux/interrupt.h>
91+#include <linux/sysfs.h>
92+#include <linux/gpio.h>
93+
94+#include <linux/mma7455l.h>
95+#include <linux/spi/spi.h>
96+
97+#define MMA7455L_WHOAMI_MAGIC 0x55
98+
99+enum mma7455l_reg {
100+ MMA7455L_REG_XOUTL = 0x00,
101+ MMA7455L_REG_XOUTH = 0x01,
102+ MMA7455L_REG_YOUTL = 0x02,
103+ MMA7455L_REG_YOUTH = 0x03,
104+ MMA7455L_REG_ZOUTL = 0x04,
105+ MMA7455L_REG_ZOUTH = 0x05,
106+ MMA7455L_REG_XOUT8 = 0x06,
107+ MMA7455L_REG_YOUT8 = 0x07,
108+ MMA7455L_REG_ZOUT8 = 0x08,
109+ MMA7455L_REG_STATUS = 0x09,
110+ MMA7455L_REG_DETSRC = 0x0a,
111+ MMA7455L_REG_TOUT = 0x0b,
112+ MMA7455L_REG_RESERVED1 = 0x0c,
113+ MMA7455L_REG_I2CAD = 0x0d,
114+ MMA7455L_REG_USRINF = 0x0e,
115+ MMA7455L_REG_WHOAMI = 0x0f,
116+ MMA7455L_REG_XOFFL = 0x10,
117+ MMA7455L_REG_XOFFH = 0x11,
118+ MMA7455L_REG_YOFFL = 0x12,
119+ MMA7455L_REG_YOFFH = 0x13,
120+ MMA7455L_REG_ZOFFL = 0x14,
121+ MMA7455L_REG_ZOFFH = 0x15,
122+ MMA7455L_REG_MCTL = 0x16,
123+ MMA7455L_REG_INTRST = 0x17,
124+ MMA7455L_REG_CTL1 = 0x18,
125+ MMA7455L_REG_CTL2 = 0x19,
126+ MMA7455L_REG_LDTH = 0x1a,
127+ MMA7455L_REG_PDTH = 0x1b,
128+ MMA7455L_REG_PW = 0x1c,
129+ MMA7455L_REG_LT = 0x1d,
130+ MMA7455L_REG_TW = 0x1e,
131+ MMA7455L_REG_RESERVED2 = 0x1f,
132+};
133+
134+enum mma7455l_reg_status {
135+ MMA7455L_STATUS_XDA = 0x08,
136+ MMA7455L_STATUS_YDA = 0x10,
137+ MMA7455L_STATUS_ZDA = 0x20,
138+};
139+
140+enum mma7455l_mode {
141+ MMA7455L_MODE_STANDBY = 0,
142+ MMA7455L_MODE_MEASUREMENT = 1,
143+ MMA7455L_MODE_LEVELDETECTION = 0x42, /* Set DRPD to on */
144+ MMA7455L_MODE_PULSEDETECTION = 0x43, /* Set DRPD to on */
145+ MMA7455L_MODE_MASK = 0x43,
146+};
147+
148+enum mma7455l_gselect {
149+ MMA7455L_GSELECT_8 = 0x0,
150+ MMA7455L_GSELECT_2 = 0x4,
151+ MMA7455L_GSELECT_4 = 0x8,
152+ MMA7455L_GSELECT_MASK = 0xC,
153+};
154+
155+/* FIXME */
156+#define MMA7455L_F_FS 0x0020 /* ADC full scale */
157+
158+struct mma7455l_info {
159+ struct spi_device *spi_dev;
160+ struct input_dev *input_dev;
161+ struct mutex lock;
162+ struct delayed_work work;
163+
164+ u8 mode;
165+ u8 gSelect;
166+
167+ u8 flags;
168+ u8 working;
169+};
170+
171+/* lowlevel register access functions */
172+
173+#define WRITE_BIT (1 << 7)
174+#define ADDR_SHIFT 1
175+
176+static inline u_int8_t __reg_read(struct mma7455l_info *mma, u_int8_t reg)
177+{
178+ int rc;
179+ u_int8_t cmd;
180+
181+ cmd = ((reg & 0x3f) << ADDR_SHIFT);
182+ rc = spi_w8r8(mma->spi_dev, cmd);
183+
184+ return rc;
185+}
186+
187+static u_int8_t reg_read(struct mma7455l_info *mma, u_int8_t reg)
188+{
189+ u_int8_t ret;
190+
191+ mutex_lock(&mma->lock);
192+ ret = __reg_read(mma, reg);
193+ mutex_unlock(&mma->lock);
194+
195+ return ret;
196+}
197+
198+static s16 __reg_read_10(struct mma7455l_info *mma, u8 reg1, u8 reg2)
199+{
200+ u8 v1, v2;
201+
202+ v1 = __reg_read(mma, reg1);
203+ v2 = __reg_read(mma, reg2);
204+
205+ return (v2 & 0x4) << 13 | (v2 & 0x3) << 8 | v1;
206+}
207+
208+static inline int __reg_write(struct mma7455l_info *mma, u_int8_t reg, u_int8_t val)
209+{
210+ u_int8_t buf[2];
211+
212+ buf[0] = ((reg & 0x3f) << ADDR_SHIFT) | WRITE_BIT;
213+ buf[1] = val;
214+
215+ return spi_write(mma->spi_dev, buf, sizeof(buf));
216+}
217+
218+static int reg_write(struct mma7455l_info *mma, u_int8_t reg, u_int8_t val)
219+{
220+ int ret;
221+
222+ mutex_lock(&mma->lock);
223+ ret = __reg_write(mma, reg, val);
224+ mutex_unlock(&mma->lock);
225+
226+ return ret;
227+}
228+
229+static s16 __reg_write_10(struct mma7455l_info *mma, u8 reg1, u8 reg2, s16 value)
230+{
231+ int ret;
232+ u8 v1, v2;
233+
234+ v1 = value & 0xFF;
235+ if(value < 0)
236+ v2 = ((value >> 8) & 0x3) | 0x4;
237+ else
238+ v2 = 0;
239+
240+ ret = __reg_write(mma, reg1, v1);
241+ ret = __reg_write(mma, reg2, v2);
242+ return ret;
243+}
244+
245+static void mma7455l_work(struct work_struct *work)
246+{
247+ struct mma7455l_info *mma =
248+ container_of(work, struct mma7455l_info, work.work);
249+
250+ s8 val;
251+ mma->working = 1;
252+
253+ /* FIXME: 10 bit accuracy? */
254+ if (!(mma->flags & MMA7455L_STATUS_XDA)) {
255+ val = reg_read(mma, MMA7455L_REG_XOUT8);
256+ input_report_abs(mma->input_dev, ABS_X, val);
257+ }
258+ if (!(mma->flags & MMA7455L_STATUS_YDA)) {
259+ val = reg_read(mma, MMA7455L_REG_YOUT8);
260+ input_report_abs(mma->input_dev, ABS_Y, val);
261+ }
262+ if (!(mma->flags & MMA7455L_STATUS_ZDA)) {
263+ val = reg_read(mma, MMA7455L_REG_ZOUT8);
264+ input_report_abs(mma->input_dev, ABS_Z, val);
265+ }
266+
267+ mma->working = 0;
268+ input_sync(mma->input_dev);
269+ put_device(&mma->spi_dev->dev);
270+
271+ /* Enable IRQ and clear out interrupt */
272+ reg_write(mma, MMA7455L_REG_INTRST, 0x3);
273+ reg_write(mma, MMA7455L_REG_INTRST, 0x0);
274+ enable_irq(mma->spi_dev->irq);
275+}
276+
277+static void mma7455l_schedule_work(struct mma7455l_info *mma)
278+{
279+ int status;
280+
281+ get_device(&mma->spi_dev->dev);
282+ status = schedule_delayed_work(&mma->work, HZ / 10);
283+}
284+
285+static irqreturn_t mma7455l_interrupt(int irq, void *_mma)
286+{
287+ struct mma7455l_info *mma = _mma;
288+
289+ /* Disable any further interrupts until we have processed
290+ * the current one */
291+ disable_irq_nosync(mma->spi_dev->irq);
292+
293+ mma7455l_schedule_work(mma);
294+ return IRQ_HANDLED;
295+}
296+
297+/* sysfs */
298+
299+static void get_mode(struct mma7455l_info *mma, u8 *mode, u8 *gSelect)
300+{
301+ u8 tmp = reg_read(mma, MMA7455L_REG_MCTL);
302+
303+ *mode = tmp & MMA7455L_MODE_MASK;
304+ *gSelect = tmp & MMA7455L_GSELECT_MASK;
305+}
306+
307+static void set_mode(struct mma7455l_info *mma, u8 mode, u8 gSelect)
308+{
309+ reg_write(mma, MMA7455L_REG_MCTL, mode | gSelect);
310+}
311+
312+static void update_mode(struct mma7455l_info *mma, u8 mode, u8 gSelect)
313+{
314+ mma->mode = mode;
315+ mma->gSelect = gSelect;
316+
317+ reg_write(mma, MMA7455L_REG_MCTL, mma->mode | mma->gSelect);
318+}
319+
320+static ssize_t show_measure(struct device *dev, struct device_attribute *attr, char *buf)
321+{
322+ struct mma7455l_info *mma = dev_get_drvdata(dev);
323+ s8 x, y, z;
324+ u8 old_Mode, old_gSelect;
325+
326+ get_mode(mma, &old_Mode, &old_gSelect);
327+ set_mode(mma, MMA7455L_MODE_MEASUREMENT, MMA7455L_GSELECT_2);
328+
329+ while (reg_read(mma, MMA7455L_REG_STATUS) == 0) {
330+ msleep(10);
331+ }
332+
333+ x = reg_read(mma, MMA7455L_REG_XOUT8);
334+ y = reg_read(mma, MMA7455L_REG_YOUT8);
335+ z = reg_read(mma, MMA7455L_REG_ZOUT8);
336+
337+ set_mode(mma, old_Mode, old_gSelect);
338+ return sprintf(buf, "%d %d %d\n", x, y, z);
339+}
340+
341+static ssize_t show_mode(struct device *dev, struct device_attribute *attr, char *buf)
342+{
343+ struct mma7455l_info *mma = dev_get_drvdata(dev);
344+
345+ switch(mma->mode)
346+ {
347+ case MMA7455L_MODE_STANDBY:
348+ return sprintf(buf, "Standby\n");
349+ break;
350+ case MMA7455L_MODE_MEASUREMENT:
351+ return sprintf(buf, "Measurement\n");
352+ break;
353+ case MMA7455L_MODE_LEVELDETECTION:
354+ return sprintf(buf, "Level Detection\n");
355+ break;
356+ case MMA7455L_MODE_PULSEDETECTION:
357+ return sprintf(buf, "Pulse Detection\n");
358+ break;
359+ }
360+
361+ return sprintf(buf, "Unknown mode!\n");
362+}
363+
364+static ssize_t show_gSelect(struct device *dev, struct device_attribute *attr, char *buf)
365+{
366+ struct mma7455l_info *mma = dev_get_drvdata(dev);
367+
368+ switch(mma->gSelect)
369+ {
370+ case MMA7455L_GSELECT_8:
371+ return sprintf(buf, "8\n");
372+ break;
373+ case MMA7455L_GSELECT_4:
374+ return sprintf(buf, "4\n");
375+ break;
376+ case MMA7455L_GSELECT_2:
377+ return sprintf(buf, "2\n");
378+ break;
379+ }
380+
381+ return sprintf(buf, "Unknown gSelect!\n");
382+}
383+
384+static ssize_t show_level_threshold(struct device *dev, struct device_attribute *attr, char *buf)
385+{
386+ struct mma7455l_info *mma = dev_get_drvdata(dev);
387+ return sprintf(buf, "%u\n", reg_read(mma, MMA7455L_REG_LDTH));
388+}
389+
390+static ssize_t show_calibration(struct device *dev, struct device_attribute *attr, char *buf)
391+{
392+ s16 x, y, z;
393+ struct mma7455l_info *mma = dev_get_drvdata(dev);
394+
395+ mutex_lock(&mma->lock);
396+ x = __reg_read_10(mma, MMA7455L_REG_XOFFL, MMA7455L_REG_XOFFH);
397+ y = __reg_read_10(mma, MMA7455L_REG_YOFFL, MMA7455L_REG_YOFFH);
398+ z = __reg_read_10(mma, MMA7455L_REG_ZOFFL, MMA7455L_REG_ZOFFH);
399+ mutex_unlock(&mma->lock);
400+
401+ return sprintf(buf, "%d %d %d\n", x, y, z);
402+}
403+
404+static ssize_t write_mode(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
405+{
406+ struct mma7455l_info *mma = dev_get_drvdata(dev);
407+
408+ if (!strncmp(buf, "Standby", count))
409+ update_mode(mma, MMA7455L_MODE_STANDBY, mma->gSelect);
410+ else if (!strncmp(buf, "Measurement", count))
411+ update_mode(mma, MMA7455L_MODE_MEASUREMENT, mma->gSelect);
412+ else if (!strncmp(buf, "Level Detection", count))
413+ update_mode(mma, MMA7455L_MODE_LEVELDETECTION, mma->gSelect);
414+ else if (!strncmp(buf, "Pulse Detection", count))
415+ update_mode(mma, MMA7455L_MODE_PULSEDETECTION, mma->gSelect);
416+
417+ return count;
418+}
419+
420+static ssize_t write_gSelect(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
421+{
422+ unsigned long v;
423+ struct mma7455l_info *mma = dev_get_drvdata(dev);
424+
425+ if(strict_strtoul(buf, 10, &v) == 0)
426+ {
427+ switch(v)
428+ {
429+ case 8:
430+ update_mode(mma, mma->mode, MMA7455L_GSELECT_8);
431+ break;
432+ case 4:
433+ update_mode(mma, mma->mode, MMA7455L_GSELECT_4);
434+ break;
435+ case 2:
436+ update_mode(mma, mma->mode, MMA7455L_GSELECT_2);
437+ break;
438+ default:
439+ return -EINVAL;
440+ break;
441+ }
442+ return count;
443+ }
444+
445+ return -EINVAL;
446+}
447+
448+static ssize_t write_level_threshold(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
449+{
450+ unsigned long v;
451+ struct mma7455l_info *mma = dev_get_drvdata(dev);
452+
453+ if(strict_strtoul(buf, 10, &v) == 0)
454+ {
455+ if(v <= 0xFF) {
456+ reg_write(mma, MMA7455L_REG_LDTH, v);
457+ return count;
458+ } else
459+ return -EINVAL;
460+ }
461+
462+ return -EINVAL;
463+}
464+
465+static ssize_t write_calibration(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
466+{
467+ int x, y, z;
468+ struct mma7455l_info *mma = dev_get_drvdata(dev);
469+
470+ if (sscanf(buf, "%d %d %d", &x, &y, &z) == 3)
471+ {
472+ mutex_lock(&mma->lock);
473+ __reg_write_10(mma, MMA7455L_REG_XOFFL, MMA7455L_REG_XOFFH, x);
474+ __reg_write_10(mma, MMA7455L_REG_YOFFL, MMA7455L_REG_YOFFH, y);
475+ __reg_write_10(mma, MMA7455L_REG_ZOFFL, MMA7455L_REG_ZOFFH, z);
476+ mutex_unlock(&mma->lock);
477+
478+ return count;
479+ }
480+
481+ return -EINVAL;
482+}
483+
484+static DEVICE_ATTR(measure, S_IRUGO, show_measure, NULL);
485+static DEVICE_ATTR(mode, S_IRUGO | S_IWUGO, show_mode, write_mode);
486+static DEVICE_ATTR(gSelect, S_IRUGO | S_IWUGO, show_gSelect, write_gSelect);
487+static DEVICE_ATTR(level_threshold, S_IRUGO | S_IWUGO, show_level_threshold, write_level_threshold);
488+static DEVICE_ATTR(calibration, S_IRUGO | S_IWUGO, show_calibration, write_calibration);
489+
490+static struct attribute *mma7455l_sysfs_entries[] = {
491+ &dev_attr_measure.attr,
492+ &dev_attr_mode.attr,
493+ &dev_attr_gSelect.attr,
494+ &dev_attr_level_threshold.attr,
495+ &dev_attr_calibration.attr,
496+ NULL
497+};
498+
499+static struct attribute_group mma7455l_attr_group = {
500+ .attrs = mma7455l_sysfs_entries,
501+};
502+
503+/* input device handling and driver core interaction */
504+static int mma7455l_input_open(struct input_dev *inp)
505+{
506+ struct mma7455l_info *mma = input_get_drvdata(inp);
507+ if(mma->mode == MMA7455L_MODE_STANDBY)
508+ update_mode(mma, MMA7455L_MODE_MEASUREMENT, mma->gSelect);
509+
510+ return 0;
511+}
512+
513+static void mma7455l_input_close(struct input_dev *inp)
514+{
515+ struct mma7455l_info *mma = input_get_drvdata(inp);
516+ update_mode(mma, MMA7455L_MODE_STANDBY, MMA7455L_GSELECT_2);
517+}
518+
519+static int __devinit mma7455l_probe(struct spi_device *spi)
520+{
521+ int rc;
522+ struct mma7455l_info *mma;
523+ struct mma7455l_platform_data *pdata = spi->dev.platform_data;
524+ u_int8_t wai;
525+
526+ mma = kzalloc(sizeof(*mma), GFP_KERNEL);
527+ if (!mma)
528+ return -ENOMEM;
529+
530+ mutex_init(&mma->lock);
531+ INIT_DELAYED_WORK(&mma->work, mma7455l_work);
532+ mma->spi_dev = spi;
533+ mma->flags = mma->working = 0;
534+
535+ spi_set_drvdata(spi, mma);
536+
537+ rc = spi_setup(spi);
538+ if (rc < 0) {
539+ printk(KERN_ERR "mma7455l error durign spi_setup of mma7455l driver\n");
540+ dev_set_drvdata(&spi->dev, NULL);
541+ kfree(mma);
542+ return rc;
543+ }
544+
545+ wai = reg_read(mma, MMA7455L_REG_WHOAMI);
546+ if (wai != MMA7455L_WHOAMI_MAGIC) {
547+ printk(KERN_ERR "mma7455l unknown whoami signature 0x%02x\n", wai);
548+ dev_set_drvdata(&spi->dev, NULL);
549+ kfree(mma);
550+ return -ENODEV;
551+ }
552+
553+ rc = request_irq(mma->spi_dev->irq, mma7455l_interrupt, IRQF_TRIGGER_HIGH,
554+ "mma7455l", mma);
555+ if (rc < 0) {
556+ dev_err(&spi->dev, "mma7455l error requesting IRQ %d\n",
557+ mma->spi_dev->irq);
558+ /* FIXME */
559+ return rc;
560+ }
561+
562+ rc = sysfs_create_group(&spi->dev.kobj, &mma7455l_attr_group);
563+ if (rc) {
564+ dev_err(&spi->dev, "error creating sysfs group\n");
565+ return rc;
566+ }
567+
568+ /* initialize input layer details */
569+ mma->input_dev = input_allocate_device();
570+ if (!mma->input_dev) {
571+ dev_err(&spi->dev, "mma7455l Unable to allocate input device\n");
572+ /* FIXME */
573+ }
574+
575+ set_bit(EV_ABS, mma->input_dev->evbit);
576+ set_bit(ABS_X, mma->input_dev->absbit);
577+ set_bit(ABS_Y, mma->input_dev->absbit);
578+ set_bit(ABS_Z, mma->input_dev->absbit);
579+
580+ input_set_drvdata(mma->input_dev, mma);
581+ mma->input_dev->name = "MMA7455L";
582+ mma->input_dev->open = mma7455l_input_open;
583+ mma->input_dev->close = mma7455l_input_close;
584+
585+ rc = input_register_device(mma->input_dev);
586+ if(!rc)
587+ {
588+ update_mode(mma, MMA7455L_MODE_STANDBY, MMA7455L_GSELECT_2);
589+
590+ mutex_lock(&mma->lock);
591+ __reg_write_10(mma, MMA7455L_REG_XOFFL, MMA7455L_REG_XOFFH, pdata->calibration_x);
592+ __reg_write_10(mma, MMA7455L_REG_YOFFL, MMA7455L_REG_YOFFH, pdata->calibration_y);
593+ __reg_write_10(mma, MMA7455L_REG_ZOFFL, MMA7455L_REG_ZOFFH, pdata->calibration_z);
594+ mutex_unlock(&mma->lock);
595+
596+ return 0;
597+ }
598+
599+ input_free_device(mma->input_dev);
600+ return rc;
601+}
602+
603+static int __devexit mma7455l_remove(struct spi_device *spi)
604+{
605+ struct mma7455l_info *mma = dev_get_drvdata(&spi->dev);
606+
607+ sysfs_remove_group(&spi->dev.kobj, &mma7455l_attr_group);
608+ input_unregister_device(mma->input_dev);
609+ dev_set_drvdata(&spi->dev, NULL);
610+ kfree(mma);
611+
612+ return 0;
613+}
614+
615+#ifdef CONFIG_PM
616+static int mma7455l_suspend(struct spi_device *spi, pm_message_t message)
617+{
618+ struct mma7455l_info *mma = dev_get_drvdata(&spi->dev);
619+ get_mode(mma, &mma->mode, &mma->gSelect);
620+ set_mode(mma, MMA7455L_MODE_STANDBY, MMA7455L_GSELECT_2);
621+
622+ return 0;
623+}
624+
625+static int mma7455l_resume(struct spi_device *spi)
626+{
627+ struct mma7455l_info *mma = dev_get_drvdata(&spi->dev);
628+ update_mode(mma, mma->mode, mma->gSelect);
629+
630+ return 0;
631+}
632+#else
633+#define mma7455l_suspend NULL
634+#define mma7455l_resume NULL
635+#endif
636+
637+static struct spi_driver mma7455l_driver = {
638+ .driver = {
639+ .name = "mma7455l",
640+ .owner = THIS_MODULE,
641+ },
642+
643+ .probe = mma7455l_probe,
644+ .remove = __devexit_p(mma7455l_remove),
645+ .suspend = mma7455l_suspend,
646+ .resume = mma7455l_resume,
647+};
648+
649+static int __init mma7455l_init(void)
650+{
651+ return spi_register_driver(&mma7455l_driver);
652+}
653+
654+static void __exit mma7455l_exit(void)
655+{
656+ spi_unregister_driver(&mma7455l_driver);
657+}
658+
659+MODULE_AUTHOR("Gregoire Gentil <gregoire@gentil.com>");
660+MODULE_LICENSE("GPL");
661+
662+module_init(mma7455l_init);
663+module_exit(mma7455l_exit);
664diff --git a/include/linux/mma7455l.h b/include/linux/mma7455l.h
665new file mode 100644
666index 0000000..12ab50a
667--- /dev/null
668+++ b/include/linux/mma7455l.h
669@@ -0,0 +1,11 @@
670+#ifndef _LINUX_MMA7455L_H
671+#define _LINUX_MMA7455L_H
672+
673+struct mma7455l_platform_data {
674+ /* Calibration offsets */
675+ s16 calibration_x;
676+ s16 calibration_y;
677+ s16 calibration_z;
678+};
679+
680+#endif /* _LINUX_MMA7455L_H */
681--
6821.6.6.1
683
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0003-bq27x00_battery-remove-error-message-output.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0003-bq27x00_battery-remove-error-message-output.patch
new file mode 100644
index 00000000..f8b307ee
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0003-bq27x00_battery-remove-error-message-output.patch
@@ -0,0 +1,53 @@
1From 6837800d92947d25e263bf041ebe7db4e804af68 Mon Sep 17 00:00:00 2001
2From: Gregoire Gentil <gregoire@gentil.com>
3Date: Fri, 12 Mar 2010 11:41:17 +0100
4Subject: [PATCH 03/17] bq27x00_battery: remove error message output
5
6---
7 drivers/power/bq27x00_battery.c | 5 -----
8 1 files changed, 0 insertions(+), 5 deletions(-)
9
10diff --git a/drivers/power/bq27x00_battery.c b/drivers/power/bq27x00_battery.c
11index 62bb981..6935bb6 100644
12--- a/drivers/power/bq27x00_battery.c
13+++ b/drivers/power/bq27x00_battery.c
14@@ -93,7 +93,6 @@ static int bq27x00_battery_temperature(struct bq27x00_device_info *di)
15
16 ret = bq27x00_read(BQ27x00_REG_TEMP, &temp, 0, di);
17 if (ret) {
18- dev_err(di->dev, "error reading temperature\n");
19 return ret;
20 }
21
22@@ -111,7 +110,6 @@ static int bq27x00_battery_voltage(struct bq27x00_device_info *di)
23
24 ret = bq27x00_read(BQ27x00_REG_VOLT, &volt, 0, di);
25 if (ret) {
26- dev_err(di->dev, "error reading voltage\n");
27 return ret;
28 }
29
30@@ -131,12 +129,10 @@ static int bq27x00_battery_current(struct bq27x00_device_info *di)
31
32 ret = bq27x00_read(BQ27x00_REG_AI, &curr, 0, di);
33 if (ret) {
34- dev_err(di->dev, "error reading current\n");
35 return 0;
36 }
37 ret = bq27x00_read(BQ27x00_REG_FLAGS, &flags, 0, di);
38 if (ret < 0) {
39- dev_err(di->dev, "error reading flags\n");
40 return 0;
41 }
42 if ((flags & (1 << 7)) != 0) {
43@@ -157,7 +153,6 @@ static int bq27x00_battery_rsoc(struct bq27x00_device_info *di)
44
45 ret = bq27x00_read(BQ27x00_REG_RSOC, &rsoc, 1, di);
46 if (ret) {
47- dev_err(di->dev, "error reading relative State-of-Charge\n");
48 return ret;
49 }
50
51--
521.6.6.1
53
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0004-bq27x00_battery-add-charged-gpio.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0004-bq27x00_battery-add-charged-gpio.patch
new file mode 100644
index 00000000..759525f2
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0004-bq27x00_battery-add-charged-gpio.patch
@@ -0,0 +1,65 @@
1From 829d500667448b7ea9465615261a988adc3aa645 Mon Sep 17 00:00:00 2001
2From: Gregoire Gentil <gregoire@gentil.com>
3Date: Fri, 12 Mar 2010 11:42:45 +0100
4Subject: [PATCH 04/17] bq27x00_battery: add charged gpio
5
6---
7 drivers/power/bq27x00_battery.c | 21 +++++++++++++++++++++
8 1 files changed, 21 insertions(+), 0 deletions(-)
9
10diff --git a/drivers/power/bq27x00_battery.c b/drivers/power/bq27x00_battery.c
11index 6935bb6..4b80f59 100644
12--- a/drivers/power/bq27x00_battery.c
13+++ b/drivers/power/bq27x00_battery.c
14@@ -28,6 +28,7 @@
15
16 #define DRIVER_VERSION "1.0.0"
17
18+#define BQ27x00_REG_MODE 0x00
19 #define BQ27x00_REG_TEMP 0x06
20 #define BQ27x00_REG_VOLT 0x08
21 #define BQ27x00_REG_RSOC 0x0B /* Relative State-of-Charge */
22@@ -65,6 +66,7 @@ static enum power_supply_property bq27x00_battery_props[] = {
23 POWER_SUPPLY_PROP_CURRENT_NOW,
24 POWER_SUPPLY_PROP_CAPACITY,
25 POWER_SUPPLY_PROP_TEMP,
26+ POWER_SUPPLY_PROP_ONLINE,
27 };
28
29 /*
30@@ -83,6 +85,22 @@ static int bq27x00_read(u8 reg, int *rt_value, int b_single,
31 }
32
33 /*
34+ * Return the GPIO status (0 or 1)
35+ * Or < 0 if something fails.
36+ */
37+static int bq27x00_gpio(struct bq27x00_device_info *di)
38+{
39+ int ret;
40+ int gpio = 0;
41+
42+ ret = bq27x00_read(BQ27x00_REG_MODE, &gpio, 0, di);
43+ if (ret)
44+ return ret;
45+
46+ return (gpio & 0x40) >> 6;
47+}
48+
49+/*
50 * Return the battery temperature in Celsius degrees
51 * Or < 0 if something fails.
52 */
53@@ -184,6 +202,9 @@ static int bq27x00_battery_get_property(struct power_supply *psy,
54 case POWER_SUPPLY_PROP_TEMP:
55 val->intval = bq27x00_battery_temperature(di);
56 break;
57+ case POWER_SUPPLY_PROP_ONLINE:
58+ val->intval = bq27x00_gpio(di);
59+ break;
60 default:
61 return -EINVAL;
62 }
63--
641.6.6.1
65
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0005-adf7846-add-more-debugging.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0005-adf7846-add-more-debugging.patch
new file mode 100644
index 00000000..f15e0a2e
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0005-adf7846-add-more-debugging.patch
@@ -0,0 +1,99 @@
1From e00ae0c0fa35b4b67bbc905581c2c7bde0e29901 Mon Sep 17 00:00:00 2001
2From: Gregoire Gentil <gregoire@gentil.com>
3Date: Fri, 12 Mar 2010 13:50:38 +0100
4Subject: [PATCH 05/17] adf7846: add more debugging
5
6---
7 drivers/input/touchscreen/ads7846.c | 73 +++++++++++++++++++++++++++++++++++
8 1 files changed, 73 insertions(+), 0 deletions(-)
9
10diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
11index 45287ab..ebdeeeb 100644
12--- a/drivers/input/touchscreen/ads7846.c
13+++ b/drivers/input/touchscreen/ads7846.c
14@@ -495,9 +495,82 @@ static ssize_t ads7846_disable_store(struct device *dev,
15
16 static DEVICE_ATTR(disable, 0664, ads7846_disable_show, ads7846_disable_store);
17
18+static ssize_t show_debounce_max(struct device *dev, struct device_attribute *attr, char *buf) {
19+ struct ads7846 *ts = dev_get_drvdata(dev);
20+ return sprintf(buf, "%u\n", ts->debounce_max);
21+}
22+
23+static ssize_t show_debounce_tol(struct device *dev, struct device_attribute *attr, char *buf) {
24+ struct ads7846 *ts = dev_get_drvdata(dev);
25+ return sprintf(buf, "%u\n", ts->debounce_tol);
26+}
27+
28+static ssize_t show_debounce_rep(struct device *dev, struct device_attribute *attr, char *buf) {
29+ struct ads7846 *ts = dev_get_drvdata(dev);
30+ return sprintf(buf, "%u\n", ts->debounce_rep);
31+}
32+
33+static ssize_t show_x_plate_ohms(struct device *dev, struct device_attribute *attr, char *buf) {
34+ struct ads7846 *ts = dev_get_drvdata(dev);
35+ return sprintf(buf, "%u\n", ts->x_plate_ohms);
36+}
37+
38+static ssize_t write_debounce_max(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) {
39+ struct ads7846 *ts = dev_get_drvdata(dev);
40+ unsigned long i;
41+
42+ if (strict_strtoul(buf, 10, &i))
43+ return -EINVAL;
44+
45+ ts->debounce_max = i;
46+ return count;
47+}
48+
49+static ssize_t write_debounce_tol(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) {
50+ struct ads7846 *ts = dev_get_drvdata(dev);
51+ unsigned long i;
52+
53+ if (strict_strtoul(buf, 10, &i))
54+ return -EINVAL;
55+
56+ ts->debounce_tol = i;
57+ return count;
58+}
59+
60+static ssize_t write_debounce_rep(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) {
61+ struct ads7846 *ts = dev_get_drvdata(dev);
62+ unsigned long i;
63+
64+ if (strict_strtoul(buf, 10, &i))
65+ return -EINVAL;
66+
67+ ts->debounce_rep = i;
68+ return count;
69+}
70+
71+static ssize_t write_x_plate_ohms(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) {
72+ struct ads7846 *ts = dev_get_drvdata(dev);
73+ unsigned long i;
74+
75+ if (strict_strtoul(buf, 10, &i))
76+ return -EINVAL;
77+
78+ ts->x_plate_ohms = i;
79+ return count;
80+}
81+
82+static DEVICE_ATTR(debounce_max, S_IRUGO | S_IWUGO, show_debounce_max, write_debounce_max);
83+static DEVICE_ATTR(debounce_tol, S_IRUGO | S_IWUGO, show_debounce_tol, write_debounce_tol);
84+static DEVICE_ATTR(debounce_rep, S_IRUGO | S_IWUGO, show_debounce_rep, write_debounce_rep);
85+static DEVICE_ATTR(x_plate_ohms, S_IRUGO | S_IWUGO, show_x_plate_ohms, write_x_plate_ohms);
86+
87 static struct attribute *ads784x_attributes[] = {
88 &dev_attr_pen_down.attr,
89 &dev_attr_disable.attr,
90+ &dev_attr_debounce_max.attr,
91+ &dev_attr_debounce_tol.attr,
92+ &dev_attr_debounce_rep.attr,
93+ &dev_attr_x_plate_ohms.attr,
94 NULL,
95 };
96
97--
981.6.6.1
99
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0006-ads7846-read-max-mix-x-y-from-pdata.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0006-ads7846-read-max-mix-x-y-from-pdata.patch
new file mode 100644
index 00000000..63a4ebbf
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0006-ads7846-read-max-mix-x-y-from-pdata.patch
@@ -0,0 +1,35 @@
1From 5f227b8aa6083437e2907ca621159228a4a24d9a Mon Sep 17 00:00:00 2001
2From: Gregoire Gentil <gregoire@gentil.com>
3Date: Fri, 12 Mar 2010 13:50:45 +0100
4Subject: [PATCH 06/17] ads7846: read max/mix x/y from pdata
5
6---
7 drivers/input/touchscreen/ads7846.c | 5 +++--
8 1 files changed, 3 insertions(+), 2 deletions(-)
9
10diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
11index ebdeeeb..56b0ffd 100644
12--- a/drivers/input/touchscreen/ads7846.c
13+++ b/drivers/input/touchscreen/ads7846.c
14@@ -604,6 +604,7 @@ static void ads7846_rx(void *ads)
15 {
16 struct ads7846 *ts = ads;
17 struct ads7846_packet *packet = ts->packet;
18+ struct ads7846_platform_data *pdata = ts->spi->dev.platform_data;
19 unsigned Rt;
20 u16 x, y, z1, z2;
21
22@@ -674,8 +675,8 @@ static void ads7846_rx(void *ads)
23 if (ts->swap_xy)
24 swap(x, y);
25
26- input_report_abs(input, ABS_X, x);
27- input_report_abs(input, ABS_Y, y);
28+ input_report_abs(input, ABS_X, pdata->x_max - x + pdata->x_min);
29+ input_report_abs(input, ABS_Y, pdata->y_max - y + pdata->y_min);
30 input_report_abs(input, ABS_PRESSURE, ts->pressure_max - Rt);
31
32 input_sync(input);
33--
341.6.6.1
35
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0007-ads7846-add-settling-delay-to-pdata.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0007-ads7846-add-settling-delay-to-pdata.patch
new file mode 100644
index 00000000..a69c7836
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0007-ads7846-add-settling-delay-to-pdata.patch
@@ -0,0 +1,59 @@
1From 7330c695afad64eef62c525cb8e54913265a3b39 Mon Sep 17 00:00:00 2001
2From: Gregoire Gentil <gregoire@gentil.com>
3Date: Fri, 12 Mar 2010 13:50:52 +0100
4Subject: [PATCH 07/17] ads7846: add settling delay to pdata
5
6---
7 drivers/input/touchscreen/ads7846.c | 22 ++++++++++++++++++++++
8 1 files changed, 22 insertions(+), 0 deletions(-)
9
10diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
11index 56b0ffd..1d9f97c 100644
12--- a/drivers/input/touchscreen/ads7846.c
13+++ b/drivers/input/touchscreen/ads7846.c
14@@ -515,6 +515,26 @@ static ssize_t show_x_plate_ohms(struct device *dev, struct device_attribute *at
15 return sprintf(buf, "%u\n", ts->x_plate_ohms);
16 }
17
18+static ssize_t show_settle_delay_usecs(struct device *dev, struct device_attribute *attr, char *buf) {
19+ struct ads7846 *ts = dev_get_drvdata(dev);
20+ struct ads7846_platform_data *pdata = ts->spi->dev.platform_data;
21+
22+ return sprintf(buf, "%u\n", pdata->settle_delay_usecs);
23+}
24+
25+static ssize_t write_settle_delay_usecs(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) {
26+ struct ads7846 *ts = dev_get_drvdata(dev);
27+ struct ads7846_platform_data *pdata = ts->spi->dev.platform_data;
28+
29+ unsigned long i;
30+
31+ if (strict_strtoul(buf, 10, &i))
32+ return -EINVAL;
33+
34+ pdata->settle_delay_usecs = i;
35+ return count;
36+}
37+
38 static ssize_t write_debounce_max(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) {
39 struct ads7846 *ts = dev_get_drvdata(dev);
40 unsigned long i;
41@@ -563,6 +583,7 @@ static DEVICE_ATTR(debounce_max, S_IRUGO | S_IWUGO, show_debounce_max, write_deb
42 static DEVICE_ATTR(debounce_tol, S_IRUGO | S_IWUGO, show_debounce_tol, write_debounce_tol);
43 static DEVICE_ATTR(debounce_rep, S_IRUGO | S_IWUGO, show_debounce_rep, write_debounce_rep);
44 static DEVICE_ATTR(x_plate_ohms, S_IRUGO | S_IWUGO, show_x_plate_ohms, write_x_plate_ohms);
45+static DEVICE_ATTR(settle_delay_usecs, S_IRUGO | S_IWUGO, show_settle_delay_usecs, write_settle_delay_usecs);
46
47 static struct attribute *ads784x_attributes[] = {
48 &dev_attr_pen_down.attr,
49@@ -571,6 +592,7 @@ static struct attribute *ads784x_attributes[] = {
50 &dev_attr_debounce_tol.attr,
51 &dev_attr_debounce_rep.attr,
52 &dev_attr_x_plate_ohms.attr,
53+ &dev_attr_settle_delay_usecs.attr,
54 NULL,
55 };
56
57--
581.6.6.1
59
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0008-DSS2-OMAPFB-Translate-X-Y-coordinates-for-the-video-.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0008-DSS2-OMAPFB-Translate-X-Y-coordinates-for-the-video-.patch
new file mode 100644
index 00000000..5d6ff3fb
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0008-DSS2-OMAPFB-Translate-X-Y-coordinates-for-the-video-.patch
@@ -0,0 +1,99 @@
1From 07396a332c4f3d6ed4ff498cb08d0338c98dc612 Mon Sep 17 00:00:00 2001
2From: Tim Yamin <plasm@roo.me.uk>
3Date: Mon, 20 Apr 2009 20:29:11 -0700
4Subject: [PATCH 08/17] DSS2: OMAPFB: Translate X/Y coordinates for the video planes when rotating.
5
6When rotating the video planes, translate the X/Y coordinates such that
7a [0,0] from userspace always maps to the correct upper left corner of
8the display. This patch assumes that you rotate plane 0 before rotating
9plane 1. Patch also corrects the scaling parameters so that the video is
10displayed in the correct orientation (vertically, instead of horizontally)
11when rotating by 90 / 270 degrees.
12
13Signed-off-by: Tim Yamin <plasm@roo.me.uk>
14---
15 drivers/video/omap2/dss/dispc.c | 16 ++++++++++++----
16 drivers/video/omap2/dss/manager.c | 2 +-
17 drivers/video/omap2/dss/overlay.c | 19 ++++++++++++++-----
18 3 files changed, 27 insertions(+), 10 deletions(-)
19
20diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
21index c6d5fc5..1b38c49 100644
22--- a/drivers/video/omap2/dss/dispc.c
23+++ b/drivers/video/omap2/dss/dispc.c
24@@ -1685,10 +1685,18 @@ static int _dispc_setup_plane(enum omap_plane plane,
25 _dispc_set_pic_size(plane, width, height);
26
27 if (plane != OMAP_DSS_GFX) {
28- _dispc_set_scaling(plane, width, height,
29- out_width, out_height,
30- ilace, five_taps, fieldmode);
31- _dispc_set_vid_size(plane, out_width, out_height);
32+ if (rotation == 1 || rotation == 3) {
33+ _dispc_set_scaling(plane, width, height,
34+ out_height, out_width,
35+ ilace, five_taps, fieldmode);
36+ _dispc_set_vid_size(plane, out_height, out_width);
37+ } else {
38+ _dispc_set_scaling(plane, width, height,
39+ out_width, out_height,
40+ ilace, five_taps, fieldmode);
41+ _dispc_set_vid_size(plane, out_width, out_height);
42+ }
43+
44 _dispc_set_vid_color_conv(plane, cconv);
45 }
46
47diff --git a/drivers/video/omap2/dss/manager.c b/drivers/video/omap2/dss/manager.c
48index 27d9c46..7c62dea 100644
49--- a/drivers/video/omap2/dss/manager.c
50+++ b/drivers/video/omap2/dss/manager.c
51@@ -702,7 +702,7 @@ static int configure_overlay(enum omap_plane plane)
52 u16 outw, outh;
53 u16 x, y, w, h;
54 u32 paddr;
55- int r;
56+ int r, pos_x = 0, pos_y = 0;
57
58 DSSDBGF("%d", plane);
59
60diff --git a/drivers/video/omap2/dss/overlay.c b/drivers/video/omap2/dss/overlay.c
61index b7f9a73..0bc0592 100644
62--- a/drivers/video/omap2/dss/overlay.c
63+++ b/drivers/video/omap2/dss/overlay.c
64@@ -374,6 +374,20 @@ int dss_check_overlay(struct omap_overlay *ovl, struct omap_dss_device *dssdev)
65 outh = info->out_height;
66 }
67
68+ if ((ovl->supported_modes & info->color_mode) == 0) {
69+ DSSERR("overlay doesn't support mode %d\n", info->color_mode);
70+ return -EINVAL;
71+ }
72+
73+ if (ovl->id != OMAP_DSS_GFX && (info->rotation == 1 ||
74+ info->rotation == 3)) {
75+ if(outw > dh || outh > dw)
76+ return -EINVAL;
77+
78+ /* If coordinates are invalid, they will be clipped later... */
79+ return 0;
80+ }
81+
82 if (dw < info->pos_x + outw) {
83 DSSDBG("check_overlay failed 1: %d < %d + %d\n",
84 dw, info->pos_x, outw);
85@@ -386,11 +400,6 @@ int dss_check_overlay(struct omap_overlay *ovl, struct omap_dss_device *dssdev)
86 return -EINVAL;
87 }
88
89- if ((ovl->supported_modes & info->color_mode) == 0) {
90- DSSERR("overlay doesn't support mode %d\n", info->color_mode);
91- return -EINVAL;
92- }
93-
94 return 0;
95 }
96
97--
981.6.6.1
99
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0009-DSS2-Fix-scaling-checks-when-rotation-is-90-or-270-d.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0009-DSS2-Fix-scaling-checks-when-rotation-is-90-or-270-d.patch
new file mode 100644
index 00000000..51305984
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0009-DSS2-Fix-scaling-checks-when-rotation-is-90-or-270-d.patch
@@ -0,0 +1,52 @@
1From fc2e9ddb93cb026ed10900d794dd1db11191dc24 Mon Sep 17 00:00:00 2001
2From: Tim Yamin <plasm@roo.me.uk>
3Date: Fri, 12 Mar 2010 13:57:38 +0100
4Subject: [PATCH 09/17] DSS2: Fix scaling checks when rotation is 90 or 270 degrees.
5
6---
7 drivers/video/omap2/dss/dispc.c | 25 +++++++++++++++++++------
8 1 files changed, 19 insertions(+), 6 deletions(-)
9
10diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
11index 1b38c49..d648c08 100644
12--- a/drivers/video/omap2/dss/dispc.c
13+++ b/drivers/video/omap2/dss/dispc.c
14@@ -1563,16 +1563,29 @@ static int _dispc_setup_plane(enum omap_plane plane,
15 }
16 } else {
17 /* video plane */
18-
19+ u8 error = 0;
20 unsigned long fclk = 0;
21
22- if (out_width < width / maxdownscale ||
23- out_width > width * 8)
24- return -EINVAL;
25+ if(rotation == 1 || rotation == 3)
26+ {
27+ if (out_width < height / maxdownscale || out_width > height * 8)
28+ error = 1;
29+
30+ if (out_height < width / maxdownscale || out_height > width * 8)
31+ error = 1;
32+ } else {
33+ if (out_width < width / maxdownscale || out_width > width * 8)
34+ error = 1;
35
36- if (out_height < height / maxdownscale ||
37- out_height > height * 8)
38+ if (out_height < height / maxdownscale || out_height > height * 8)
39+ error = 1;
40+ }
41+
42+ if(error != 0)
43+ {
44+ printk("DSS: Unable to down/up scale video plane\n");
45 return -EINVAL;
46+ }
47
48 switch (color_mode) {
49 case OMAP_DSS_COLOR_RGBX32:
50--
511.6.6.1
52
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0010-add-touchbook-hid-driver.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0010-add-touchbook-hid-driver.patch
new file mode 100644
index 00000000..aa3b359c
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0010-add-touchbook-hid-driver.patch
@@ -0,0 +1,339 @@
1From 0f651f19bf9cfecbb76d6f0b251e3d8395f306b8 Mon Sep 17 00:00:00 2001
2From: Gregoire Gentil <gregoire@gentil.com>
3Date: Fri, 12 Mar 2010 14:39:07 +0100
4Subject: [PATCH 10/17] add touchbook hid driver
5
6---
7 drivers/hid/Kconfig | 7 ++
8 drivers/hid/Makefile | 1 +
9 drivers/hid/hid-ai.c | 260 ++++++++++++++++++++++++++++++++++++++++++++++++
10 drivers/hid/hid-core.c | 1 +
11 drivers/hid/hid-ids.h | 3 +
12 5 files changed, 272 insertions(+), 0 deletions(-)
13 create mode 100644 drivers/hid/hid-ai.c
14
15diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
16index 24d90ea..3760565 100644
17--- a/drivers/hid/Kconfig
18+++ b/drivers/hid/Kconfig
19@@ -62,6 +62,13 @@ config HID_A4TECH
20 ---help---
21 Support for A4 tech X5 and WOP-35 / Trust 450L mice.
22
23+config HID_AI
24+ tristate "Always Innovating" if EMBEDDED
25+ depends on USB_HID
26+ default !EMBEDDED
27+ ---help---
28+ Support for Always Innovating Touch Book.
29+
30 config HID_APPLE
31 tristate "Apple" if EMBEDDED
32 depends on (USB_HID || BT_HIDP)
33diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
34index 0de2dff..1787952 100644
35--- a/drivers/hid/Makefile
36+++ b/drivers/hid/Makefile
37@@ -20,6 +20,7 @@ ifdef CONFIG_LOGIRUMBLEPAD2_FF
38 endif
39
40 obj-$(CONFIG_HID_A4TECH) += hid-a4tech.o
41+obj-$(CONFIG_HID_AI) += hid-ai.o
42 obj-$(CONFIG_HID_APPLE) += hid-apple.o
43 obj-$(CONFIG_HID_BELKIN) += hid-belkin.o
44 obj-$(CONFIG_HID_CHERRY) += hid-cherry.o
45diff --git a/drivers/hid/hid-ai.c b/drivers/hid/hid-ai.c
46new file mode 100644
47index 0000000..83aecaf
48--- /dev/null
49+++ b/drivers/hid/hid-ai.c
50@@ -0,0 +1,260 @@
51+/*
52+ * USB HID quirks support for the Always Innovating Touch Book
53+ * Code borrowed from hid-apple.c
54+ *
55+ * Copyright (c) 2009 Tim Yamin <plasm@roo.me.uk>
56+ */
57+
58+/*
59+ * This program is free software; you can redistribute it and/or modify it
60+ * under the terms of the GNU General Public License as published by the Free
61+ * Software Foundation; either version 2 of the License, or (at your option)
62+ * any later version.
63+ */
64+
65+#include <linux/device.h>
66+#include <linux/hid.h>
67+#include <linux/module.h>
68+#include <linux/usb.h>
69+
70+#include "hid-ids.h"
71+
72+struct ai_sc {
73+ unsigned long quirks;
74+ unsigned int fn_on;
75+ DECLARE_BITMAP(pressed_fn, KEY_CNT);
76+};
77+
78+struct ai_key_translation {
79+ u16 from;
80+ u16 to;
81+ u8 flags;
82+};
83+
84+static struct ai_key_translation ai_fn_keys[] = {
85+ { KEY_F6, KEY_BRIGHTNESSDOWN },
86+ { KEY_F7, KEY_BRIGHTNESSUP },
87+
88+ { KEY_F8, KEY_MUTE },
89+ { KEY_F9, KEY_VOLUMEDOWN },
90+ { KEY_F10, KEY_VOLUMEUP },
91+
92+ { KEY_UP, KEY_PAGEUP },
93+ { KEY_DOWN, KEY_PAGEDOWN },
94+ { }
95+};
96+
97+extern unsigned int ai_revision;
98+int swap_key = 0;
99+
100+static struct ai_key_translation *ai_find_translation(
101+ struct ai_key_translation *table, u16 from)
102+{
103+ struct ai_key_translation *trans;
104+
105+ /* Look for the translation */
106+ for (trans = table; trans->from; trans++)
107+ if (trans->from == from)
108+ return trans;
109+
110+ return NULL;
111+}
112+
113+static int ai_event(struct hid_device *hid, struct hid_field *field,
114+ struct hid_usage *usage, __s32 value)
115+{
116+ int do_translate;
117+
118+ struct input_dev *input = field->hidinput->input;
119+ struct ai_sc *asc = hid_get_drvdata(hid);
120+ struct ai_key_translation *trans;
121+
122+ if (swap_key && usage->code == KEY_RIGHTSHIFT) {
123+ input_event(input, usage->type, KEY_END, value);
124+ return 1;
125+ }
126+
127+ if (swap_key && usage->code == KEY_END) {
128+ input_event(input, usage->type, KEY_RIGHTSHIFT, value);
129+ return 1;
130+ }
131+
132+ if (usage->code == KEY_POWER) {
133+ asc->fn_on = !!value;
134+ input_event(input, usage->type, usage->code, value);
135+ return 1;
136+ }
137+
138+ trans = ai_find_translation(ai_fn_keys, usage->code);
139+ if (trans) {
140+ if (test_bit(usage->code, asc->pressed_fn))
141+ do_translate = 1;
142+ else
143+ do_translate = asc->fn_on;
144+
145+ if (do_translate) {
146+ if (value)
147+ set_bit(usage->code, asc->pressed_fn);
148+ else
149+ clear_bit(usage->code, asc->pressed_fn);
150+
151+ input_event(input, usage->type, trans->to,
152+ value);
153+
154+ return 1;
155+ }
156+ }
157+
158+ return 0;
159+}
160+
161+static int ai_input_mapping(struct hid_device *hdev, struct hid_input *hi,
162+ struct hid_field *field, struct hid_usage *usage,
163+ unsigned long **bit, int *max)
164+{
165+ struct ai_key_translation *trans;
166+
167+ /* Enable all other keys */
168+ for (trans = ai_fn_keys; trans->from; trans++)
169+ set_bit(trans->to, hi->input->keybit);
170+
171+ return 0;
172+}
173+
174+static ssize_t show_swap_key(struct device *dev,
175+ struct device_attribute *attr, char *buf)
176+{
177+ return snprintf(buf, PAGE_SIZE, "%d\n", swap_key);
178+}
179+
180+static ssize_t store_swap_key(struct device *dev,
181+ struct device_attribute *attr,
182+ const char *buf, size_t count)
183+{
184+ swap_key = simple_strtoul(buf, NULL, 0);
185+
186+ if (swap_key != 0 && swap_key != 1) {
187+ swap_key = 0;
188+ return -EINVAL;
189+ }
190+
191+ return count;
192+}
193+
194+static struct device_attribute ai_hid_attrs[] = {
195+ __ATTR(swap_key, S_IRUGO | S_IWUGO, show_swap_key, store_swap_key),
196+};
197+
198+int ai_create_sysfs(struct hid_device *hdev)
199+{
200+ int i;
201+ int r;
202+
203+ for (i = 0; i < ARRAY_SIZE(ai_hid_attrs); i++) {
204+ r = device_create_file(&hdev->dev,
205+ &ai_hid_attrs[i]);
206+
207+ if (r) {
208+ dev_err(&hdev->dev, "failed to create sysfs file\n");
209+ return r;
210+ }
211+ }
212+
213+ return 0;
214+}
215+
216+void ai_remove_sysfs(struct hid_device *hdev)
217+{
218+ int i;
219+
220+ for (i = 0; i < ARRAY_SIZE(ai_hid_attrs); i++)
221+ device_remove_file(&hdev->dev,
222+ &ai_hid_attrs[i]);
223+}
224+
225+static int ai_probe(struct hid_device *hdev,
226+ const struct hid_device_id *id)
227+{
228+ unsigned long quirks = id->driver_data;
229+ struct ai_sc *asc;
230+ unsigned int connect_mask = HID_CONNECT_DEFAULT;
231+ int ret;
232+
233+ asc = kzalloc(sizeof(*asc), GFP_KERNEL);
234+ if (asc == NULL) {
235+ dev_err(&hdev->dev, "can't alloc ai descriptor\n");
236+ return -ENOMEM;
237+ }
238+
239+ asc->quirks = quirks;
240+ hid_set_drvdata(hdev, asc);
241+
242+ ret = hid_parse(hdev);
243+ if (ret) {
244+ dev_err(&hdev->dev, "parse failed\n");
245+ goto err_free;
246+ }
247+
248+ ret = ai_create_sysfs(hdev);
249+ if (ret) {
250+ dev_err(&hdev->dev, "failed to create sysfs entries\n");
251+ goto err_free;
252+ }
253+
254+ swap_key = (ai_revision >= 4) ? 1 : 0;
255+
256+ ret = hid_hw_start(hdev, connect_mask);
257+ if (ret) {
258+ dev_err(&hdev->dev, "hw start failed\n");
259+ goto err_free;
260+ }
261+
262+ return 0;
263+err_free:
264+ kfree(asc);
265+ return ret;
266+}
267+
268+static void ai_remove(struct hid_device *hdev)
269+{
270+ hid_hw_stop(hdev);
271+ kfree(hid_get_drvdata(hdev));
272+ ai_remove_sysfs(hdev);
273+}
274+
275+static const struct hid_device_id ai_devices[] = {
276+ { HID_USB_DEVICE(USB_VENDOR_ID_AI, USB_DEVICE_ID_AI_TOUCH_BOOK) },
277+ { }
278+};
279+
280+MODULE_DEVICE_TABLE(hid, ai_devices);
281+
282+static struct hid_driver ai_driver = {
283+ .name = "ai",
284+ .id_table = ai_devices,
285+ .probe = ai_probe,
286+ .remove = ai_remove,
287+ .event = ai_event,
288+ .input_mapping = ai_input_mapping,
289+};
290+
291+static int ai_init(void)
292+{
293+ int ret;
294+
295+ ret = hid_register_driver(&ai_driver);
296+ if (ret)
297+ printk(KERN_ERR "can't register ai driver\n");
298+
299+ return ret;
300+}
301+
302+static void ai_exit(void)
303+{
304+ hid_unregister_driver(&ai_driver);
305+}
306+
307+module_init(ai_init);
308+module_exit(ai_exit);
309+MODULE_LICENSE("GPL");
310+HID_COMPAT_LOAD_DRIVER(ai);
311diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
312index 80792d3..f6b5960 100644
313--- a/drivers/hid/hid-core.c
314+++ b/drivers/hid/hid-core.c
315@@ -1250,6 +1250,7 @@ EXPORT_SYMBOL_GPL(hid_disconnect);
316 static const struct hid_device_id hid_blacklist[] = {
317 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
318 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
319+ { HID_USB_DEVICE(USB_VENDOR_ID_AI, USB_DEVICE_ID_AI_TOUCH_BOOK) },
320 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) },
321 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
322 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
323diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
324index 3839340..5a0127d 100644
325--- a/drivers/hid/hid-ids.h
326+++ b/drivers/hid/hid-ids.h
327@@ -54,6 +54,9 @@
328 #define USB_VENDOR_ID_ALPS 0x0433
329 #define USB_DEVICE_ID_IBM_GAMEPAD 0x1101
330
331+#define USB_VENDOR_ID_AI 0xa110
332+#define USB_DEVICE_ID_AI_TOUCH_BOOK 0x0002
333+
334 #define USB_VENDOR_ID_APPLE 0x05ac
335 #define USB_DEVICE_ID_APPLE_MIGHTYMOUSE 0x0304
336 #define USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI 0x020e
337--
3381.6.6.1
339
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0011-Make-backlight-controls-accessible-to-users.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0011-Make-backlight-controls-accessible-to-users.patch
new file mode 100644
index 00000000..c6d36787
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0011-Make-backlight-controls-accessible-to-users.patch
@@ -0,0 +1,25 @@
1From b46a494e0c02450e412db221d75446671b6ef511 Mon Sep 17 00:00:00 2001
2From: Gregoire Gentil <gregroire@gentil.com>
3Date: Fri, 12 Mar 2010 14:41:05 +0100
4Subject: [PATCH 11/17] Make backlight controls accessible to users
5
6---
7 drivers/video/backlight/backlight.c | 2 +-
8 1 files changed, 1 insertions(+), 1 deletions(-)
9
10diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
11index 6615ac7..7898707 100644
12--- a/drivers/video/backlight/backlight.c
13+++ b/drivers/video/backlight/backlight.c
14@@ -228,7 +228,7 @@ static void bl_device_release(struct device *dev)
15
16 static struct device_attribute bl_device_attributes[] = {
17 __ATTR(bl_power, 0644, backlight_show_power, backlight_store_power),
18- __ATTR(brightness, 0644, backlight_show_brightness,
19+ __ATTR(brightness, 0666, backlight_show_brightness,
20 backlight_store_brightness),
21 __ATTR(actual_brightness, 0444, backlight_show_actual_brightness,
22 NULL),
23--
241.6.6.1
25
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0012-ads7846-don-t-error-out-when-there-s-no-pendown-gpio.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0012-ads7846-don-t-error-out-when-there-s-no-pendown-gpio.patch
new file mode 100644
index 00000000..24fb9132
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0012-ads7846-don-t-error-out-when-there-s-no-pendown-gpio.patch
@@ -0,0 +1,30 @@
1From 4c3ef06a333cf1f873a9a8de05af90959a5d1e68 Mon Sep 17 00:00:00 2001
2From: Gregoire Gentil <gregoire@gentil.com>
3Date: Fri, 12 Mar 2010 15:04:58 +0100
4Subject: [PATCH 12/17] ads7846: don't error out when there's no pendown gpio
5
6---
7 drivers/input/touchscreen/ads7846.c | 7 -------
8 1 files changed, 0 insertions(+), 7 deletions(-)
9
10diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
11index 1d9f97c..c72c3ae 100644
12--- a/drivers/input/touchscreen/ads7846.c
13+++ b/drivers/input/touchscreen/ads7846.c
14@@ -952,13 +952,6 @@ static int __devinit setup_pendown(struct spi_device *spi, struct ads7846 *ts)
15 return 0;
16 }
17
18- err = gpio_request(pdata->gpio_pendown, "ads7846_pendown");
19- if (err) {
20- dev_err(&spi->dev, "failed to request pendown GPIO%d\n",
21- pdata->gpio_pendown);
22- return err;
23- }
24-
25 ts->gpio_pendown = pdata->gpio_pendown;
26 return 0;
27 }
28--
291.6.6.1
30
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0013-ASoC-add-driver-for-omap3-touchbook.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0013-ASoC-add-driver-for-omap3-touchbook.patch
new file mode 100644
index 00000000..2da7354e
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0013-ASoC-add-driver-for-omap3-touchbook.patch
@@ -0,0 +1,350 @@
1From 96ce6261efe4c194d9188e0f352803bcd92f1c59 Mon Sep 17 00:00:00 2001
2From: Gregoire Gentil <gregoire@gentil.com>
3Date: Wed, 31 Mar 2010 11:14:04 +0200
4Subject: [PATCH 13/17] ASoC: add driver for omap3-touchbook
5
6---
7 sound/soc/omap/Kconfig | 8 +
8 sound/soc/omap/Makefile | 2 +
9 sound/soc/omap/omap3touchbook.c | 291 +++++++++++++++++++++++++++++++++++++++
10 3 files changed, 301 insertions(+), 0 deletions(-)
11 create mode 100644 sound/soc/omap/omap3touchbook.c
12
13diff --git a/sound/soc/omap/Kconfig b/sound/soc/omap/Kconfig
14index 61952aa..a7c06ab 100644
15--- a/sound/soc/omap/Kconfig
16+++ b/sound/soc/omap/Kconfig
17@@ -101,6 +101,14 @@ config SND_OMAP_SOC_OMAP3_BEAGLE
18 help
19 Say Y if you want to add support for SoC audio on the Beagleboard.
20
21+config SND_OMAP_SOC_OMAP3_TOUCHBOOK
22+ tristate "SoC Audio support for OMAP3 Touch Book"
23+ depends on TWL4030_CORE && SND_OMAP_SOC && MACH_OMAP3_TOUCHBOOK
24+ select SND_OMAP_SOC_MCBSP
25+ select SND_SOC_TWL4030
26+ help
27+ Say Y if you want to add support for SoC audio on the Touch Book.
28+
29 config SND_OMAP_SOC_ZOOM2
30 tristate "SoC Audio support for Zoom2"
31 depends on TWL4030_CORE && SND_OMAP_SOC && MACH_OMAP_ZOOM2
32diff --git a/sound/soc/omap/Makefile b/sound/soc/omap/Makefile
33index 19283e5..e3f172f 100644
34--- a/sound/soc/omap/Makefile
35+++ b/sound/soc/omap/Makefile
36@@ -16,6 +16,7 @@ snd-soc-am3517evm-objs := am3517evm.o
37 snd-soc-sdp3430-objs := sdp3430.o
38 snd-soc-omap3pandora-objs := omap3pandora.o
39 snd-soc-omap3beagle-objs := omap3beagle.o
40+snd-soc-omap3touchbook-objs := omap3touchbook.o
41 snd-soc-zoom2-objs := zoom2.o
42 snd-soc-igep0020-objs := igep0020.o
43
44@@ -29,5 +30,6 @@ obj-$(CONFIG_SND_OMAP_SOC_AM3517EVM) += snd-soc-am3517evm.o
45 obj-$(CONFIG_SND_OMAP_SOC_SDP3430) += snd-soc-sdp3430.o
46 obj-$(CONFIG_SND_OMAP_SOC_OMAP3_PANDORA) += snd-soc-omap3pandora.o
47 obj-$(CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE) += snd-soc-omap3beagle.o
48+obj-$(CONFIG_SND_OMAP_SOC_OMAP3_TOUCHBOOK) += snd-soc-omap3touchbook.o
49 obj-$(CONFIG_SND_OMAP_SOC_ZOOM2) += snd-soc-zoom2.o
50 obj-$(CONFIG_SND_OMAP_SOC_IGEP0020) += snd-soc-igep0020.o
51diff --git a/sound/soc/omap/omap3touchbook.c b/sound/soc/omap/omap3touchbook.c
52new file mode 100644
53index 0000000..c5e6eaa
54--- /dev/null
55+++ b/sound/soc/omap/omap3touchbook.c
56@@ -0,0 +1,291 @@
57+/*
58+ * omap3touchbook.c -- SoC audio for Touch Book
59+ *
60+ * Copyright (C) 2009-2010 Always Innovating
61+ *
62+ * Author: Gregoire Gentil <gregoire@gentil.com>
63+ *
64+ * Based on:
65+ * Author: Steve Sakoman <steve@sakoman.com>
66+ * Author: Misael Lopez Cruz <x0052729@ti.com>
67+ *
68+ * This program is free software; you can redistribute it and/or
69+ * modify it under the terms of the GNU General Public License
70+ * version 2 as published by the Free Software Foundation.
71+ *
72+ * This program is distributed in the hope that it will be useful, but
73+ * WITHOUT ANY WARRANTY; without even the implied warranty of
74+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
75+ * General Public License for more details.
76+ *
77+ * You should have received a copy of the GNU General Public License
78+ * along with this program; if not, write to the Free Software
79+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
80+ * 02110-1301 USA
81+ *
82+ */
83+
84+#include <linux/clk.h>
85+#include <linux/platform_device.h>
86+#include <linux/i2c/twl.h>
87+#include <sound/core.h>
88+#include <sound/pcm.h>
89+#include <sound/soc.h>
90+#include <sound/soc-dapm.h>
91+#include <sound/jack.h>
92+
93+#include <asm/mach-types.h>
94+#include <mach/hardware.h>
95+#include <mach/gpio.h>
96+#include <plat/mcbsp.h>
97+
98+#include "omap-mcbsp.h"
99+#include "omap-pcm.h"
100+#include "../codecs/twl4030.h"
101+
102+static struct snd_soc_card snd_soc_omap3touchbook;
103+
104+static int omap3touchbook_hw_params(struct snd_pcm_substream *substream,
105+ struct snd_pcm_hw_params *params)
106+{
107+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
108+ struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
109+ struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
110+ unsigned int fmt;
111+ int ret;
112+
113+ switch (params_channels(params)) {
114+ case 2: /* Stereo I2S mode */
115+ fmt = SND_SOC_DAIFMT_I2S |
116+ SND_SOC_DAIFMT_NB_NF |
117+ SND_SOC_DAIFMT_CBM_CFM;
118+ break;
119+ case 4: /* Four channel TDM mode */
120+ fmt = SND_SOC_DAIFMT_DSP_A |
121+ SND_SOC_DAIFMT_IB_NF |
122+ SND_SOC_DAIFMT_CBM_CFM;
123+ break;
124+ default:
125+ return -EINVAL;
126+ }
127+
128+ /* Set codec DAI configuration */
129+ ret = snd_soc_dai_set_fmt(codec_dai, fmt);
130+ if (ret < 0) {
131+ printk(KERN_ERR "can't set codec DAI configuration\n");
132+ return ret;
133+ }
134+
135+ /* Set cpu DAI configuration */
136+ ret = snd_soc_dai_set_fmt(cpu_dai, fmt);
137+ if (ret < 0) {
138+ printk(KERN_ERR "can't set cpu DAI configuration\n");
139+ return ret;
140+ }
141+
142+ /* Set the codec system clock for DAC and ADC */
143+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 26000000,
144+ SND_SOC_CLOCK_IN);
145+ if (ret < 0) {
146+ printk(KERN_ERR "can't set codec system clock\n");
147+ return ret;
148+ }
149+
150+ return 0;
151+}
152+
153+static struct snd_soc_ops omap3touchbook_ops = {
154+ .hw_params = omap3touchbook_hw_params,
155+};
156+
157+/* Headset jack */
158+static struct snd_soc_jack hs_jack;
159+
160+/* Headset jack detection DAPM pins */
161+static struct snd_soc_jack_pin hs_jack_pins[] = {
162+ {
163+ .pin = "Headset Stereo",
164+ .mask = SND_JACK_HEADPHONE,
165+ },
166+ {
167+ .pin = "Headset Mic",
168+ .mask = SND_JACK_HEADPHONE,
169+ },
170+ {
171+ .pin = "External Speakers",
172+ .mask = SND_JACK_HEADPHONE,
173+ .invert = 1,
174+ },
175+};
176+
177+/* Headset jack detection gpios */
178+static struct snd_soc_jack_gpio hs_jack_gpios[] = {
179+ {
180+ .gpio = 56,
181+ .name = "hsdet-gpio",
182+ .report = SND_JACK_HEADSET,
183+ .debounce_time = 200,
184+ },
185+};
186+
187+/* omap3touchbook machine DAPM */
188+static const struct snd_soc_dapm_widget omap3touchbook_twl4030_dapm_widgets[] = {
189+ SND_SOC_DAPM_SPK("External Speakers", NULL),
190+ SND_SOC_DAPM_HP("Headset Stereo", NULL),
191+ SND_SOC_DAPM_MIC("Headset Mic", NULL),
192+ SND_SOC_DAPM_LINE("Line In", NULL),
193+};
194+
195+static const struct snd_soc_dapm_route audio_map[] = {
196+ /* External Speakers: HFL, HFR */
197+ {"External Speakers", NULL, "HFL"},
198+ {"External Speakers", NULL, "HFR"},
199+
200+ /* Headset Stereo: HSOL, HSOR */
201+ {"Headset Stereo", NULL, "HSOL"},
202+ {"Headset Stereo", NULL, "HSOR"},
203+
204+ /* Micro: HSMIC */
205+ {"HSMIC", NULL, "Headset Mic Bias"},
206+ {"Headset Mic Bias", NULL, "Headset Mic"},
207+
208+ /* Line In: AUXL, AUXR */
209+ {"AUXL", NULL, "Line In"},
210+ {"AUXR", NULL, "Line In"},
211+};
212+
213+static int omap3touchbook_twl4030_init(struct snd_soc_codec *codec)
214+{
215+ int ret;
216+
217+ /* Add omap3touchbook specific widgets */
218+ ret = snd_soc_dapm_new_controls(codec, omap3touchbook_twl4030_dapm_widgets,
219+ ARRAY_SIZE(omap3touchbook_twl4030_dapm_widgets));
220+ if (ret)
221+ return ret;
222+
223+ /* Set up omap3touchbook specific audio path audio_map */
224+ snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
225+
226+ /* omap3touchbook connected pins */
227+ snd_soc_dapm_enable_pin(codec, "External Speakers");
228+ snd_soc_dapm_enable_pin(codec, "Headset Stereo");
229+ snd_soc_dapm_enable_pin(codec, "Headset Mic");
230+ snd_soc_dapm_enable_pin(codec, "Line In");
231+
232+ /* omap3touchbook not connected pins */
233+ snd_soc_dapm_nc_pin(codec, "CARKITMIC");
234+ snd_soc_dapm_nc_pin(codec, "MAINMIC");
235+ snd_soc_dapm_nc_pin(codec, "SUBMIC");
236+ snd_soc_dapm_nc_pin(codec, "DIGIMIC0");
237+ snd_soc_dapm_nc_pin(codec, "DIGIMIC1");
238+ snd_soc_dapm_nc_pin(codec, "OUTL");
239+ snd_soc_dapm_nc_pin(codec, "OUTR");
240+ snd_soc_dapm_nc_pin(codec, "EARPIECE");
241+ snd_soc_dapm_nc_pin(codec, "PREDRIVEL");
242+ snd_soc_dapm_nc_pin(codec, "PREDRIVER");
243+ snd_soc_dapm_nc_pin(codec, "CARKITL");
244+ snd_soc_dapm_nc_pin(codec, "CARKITR");
245+ snd_soc_dapm_nc_pin(codec, "VIBRA");
246+
247+ ret = snd_soc_dapm_sync(codec);
248+ if (ret)
249+ return ret;
250+
251+ /* Headset jack detection */
252+ ret = snd_soc_jack_new(&snd_soc_omap3touchbook, "Headset Jack",
253+ SND_JACK_HEADSET, &hs_jack);
254+ if (ret)
255+ return ret;
256+
257+ ret = snd_soc_jack_add_pins(&hs_jack, ARRAY_SIZE(hs_jack_pins),
258+ hs_jack_pins);
259+ if (ret)
260+ return ret;
261+
262+ ret = snd_soc_jack_add_gpios(&hs_jack, ARRAY_SIZE(hs_jack_gpios),
263+ hs_jack_gpios);
264+
265+ return ret;
266+}
267+
268+/* Digital audio interface glue - connects codec <--> CPU */
269+static struct snd_soc_dai_link omap3touchbook_dai = {
270+ .name = "TWL4030 I2S",
271+ .stream_name = "TWL4030 Audio",
272+ .cpu_dai = &omap_mcbsp_dai[0],
273+ .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI],
274+ .init = omap3touchbook_twl4030_init,
275+ .ops = &omap3touchbook_ops,
276+};
277+
278+/* Audio machine driver */
279+static struct snd_soc_card snd_soc_omap3touchbook = {
280+ .name = "omap3touchbook",
281+ .platform = &omap_soc_platform,
282+ .dai_link = &omap3touchbook_dai,
283+ .num_links = 1,
284+};
285+
286+/* twl4030 setup */
287+static struct twl4030_setup_data twl4030_setup = {
288+ .ramp_delay_value = 3,
289+ .sysclk = 26000,
290+ .hs_extmute = 1,
291+};
292+
293+/* Audio subsystem */
294+static struct snd_soc_device omap3touchbook_snd_devdata = {
295+ .card = &snd_soc_omap3touchbook,
296+ .codec_dev = &soc_codec_dev_twl4030,
297+ .codec_data = &twl4030_setup,
298+};
299+
300+static struct platform_device *omap3touchbook_snd_device;
301+
302+static int __init omap3touchbook_soc_init(void)
303+{
304+ int ret;
305+ u8 pin_mux;
306+
307+ if (!machine_is_touchbook()) {
308+ pr_debug("Not Touch Book!\n");
309+ //return -ENODEV;
310+ }
311+ printk(KERN_INFO "Touch Book SoC init\n");
312+
313+ omap3touchbook_snd_device = platform_device_alloc("soc-audio", -1);
314+ if (!omap3touchbook_snd_device) {
315+ printk(KERN_ERR "Platform device allocation failed\n");
316+ return -ENOMEM;
317+ }
318+
319+ platform_set_drvdata(omap3touchbook_snd_device, &omap3touchbook_snd_devdata);
320+ omap3touchbook_snd_devdata.dev = &omap3touchbook_snd_device->dev;
321+ *(unsigned int *)omap3touchbook_dai.cpu_dai->private_data = 1; /* McBSP2 */
322+
323+ ret = platform_device_add(omap3touchbook_snd_device);
324+ if (ret)
325+ goto err1;
326+
327+ return 0;
328+
329+err1:
330+ printk(KERN_ERR "Unable to add platform device\n");
331+ platform_device_put(omap3touchbook_snd_device);
332+
333+ return ret;
334+}
335+module_init(omap3touchbook_soc_init);
336+
337+static void __exit omap3touchbook_soc_exit(void)
338+{
339+ snd_soc_jack_free_gpios(&hs_jack, ARRAY_SIZE(hs_jack_gpios),
340+ hs_jack_gpios);
341+
342+ platform_device_unregister(omap3touchbook_snd_device);
343+}
344+module_exit(omap3touchbook_soc_exit);
345+
346+MODULE_AUTHOR("Gregoire Gentil <gregoire@gentil.com>");
347+MODULE_LICENSE("GPL");
348--
3491.6.6.1
350
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0014-backlight-add-PWM-support.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0014-backlight-add-PWM-support.patch
new file mode 100644
index 00000000..d517f072
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0014-backlight-add-PWM-support.patch
@@ -0,0 +1,126 @@
1From cc8cb0d0731c7a0517653e65c754051a69f34c3e Mon Sep 17 00:00:00 2001
2From: Gregoire Gentil <gregoire@gentil.com>
3Date: Wed, 31 Mar 2010 11:14:04 +0200
4Subject: [PATCH 14/17] backlight: add PWM support
5
6---
7 drivers/video/backlight/backlight.c | 81 +++++++++++++++++++++++++++++++++++
8 include/linux/backlight.h | 3 +
9 2 files changed, 84 insertions(+), 0 deletions(-)
10
11diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
12index 7898707..615f40f 100644
13--- a/drivers/video/backlight/backlight.c
14+++ b/drivers/video/backlight/backlight.c
15@@ -226,6 +226,84 @@ static void bl_device_release(struct device *dev)
16 kfree(bd);
17 }
18
19+static ssize_t backlight_show_boost(struct device *dev, struct device_attribute *attr, char *buf)
20+{
21+ struct backlight_device *bd = to_backlight_device(dev);
22+ return sprintf(buf, "%u\n", bd->props.boost);
23+}
24+
25+static ssize_t backlight_store_boost(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
26+{
27+ unsigned long i;
28+ struct backlight_device *bd = to_backlight_device(dev);
29+
30+ if (strict_strtoul(buf, 10, &i))
31+ return -EINVAL;
32+
33+ mutex_lock(&bd->ops_lock);
34+ if (bd->ops)
35+ {
36+ if (i)
37+ bd->props.boost = 1;
38+ else
39+ bd->props.boost = 0;
40+ backlight_update_status(bd);
41+ }
42+ mutex_unlock(&bd->ops_lock);
43+
44+ return count;
45+}
46+
47+static ssize_t backlight_show_pwm_fq(struct device *dev, struct device_attribute *attr, char *buf)
48+{
49+ struct backlight_device *bd = to_backlight_device(dev);
50+ return sprintf(buf, "%u\n", bd->props.pwm_fq);
51+}
52+
53+static ssize_t backlight_store_pwm_fq(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
54+{
55+ unsigned long i;
56+ struct backlight_device *bd = to_backlight_device(dev);
57+
58+ if (strict_strtoul(buf, 10, &i))
59+ return -EINVAL;
60+
61+ mutex_lock(&bd->ops_lock);
62+ if (bd->ops)
63+ {
64+ bd->props.pwm_fq = i;
65+ backlight_update_status(bd);
66+ }
67+ mutex_unlock(&bd->ops_lock);
68+
69+ return count;
70+}
71+
72+static ssize_t backlight_show_min_duty(struct device *dev, struct device_attribute *attr, char *buf)
73+{
74+ struct backlight_device *bd = to_backlight_device(dev);
75+ return sprintf(buf, "%u\n", bd->props.min_duty);
76+}
77+
78+static ssize_t backlight_store_min_duty(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
79+{
80+ unsigned long i;
81+ struct backlight_device *bd = to_backlight_device(dev);
82+
83+ if (strict_strtoul(buf, 10, &i))
84+ return -EINVAL;
85+
86+ mutex_lock(&bd->ops_lock);
87+ if (bd->ops)
88+ {
89+ bd->props.min_duty = i;
90+ backlight_update_status(bd);
91+ }
92+ mutex_unlock(&bd->ops_lock);
93+
94+ return count;
95+}
96+
97 static struct device_attribute bl_device_attributes[] = {
98 __ATTR(bl_power, 0644, backlight_show_power, backlight_store_power),
99 __ATTR(brightness, 0666, backlight_show_brightness,
100@@ -233,6 +311,9 @@ static struct device_attribute bl_device_attributes[] = {
101 __ATTR(actual_brightness, 0444, backlight_show_actual_brightness,
102 NULL),
103 __ATTR(max_brightness, 0444, backlight_show_max_brightness, NULL),
104+ __ATTR(boost, 0666, backlight_show_boost, backlight_store_boost),
105+ __ATTR(pwm_fq, 0666, backlight_show_pwm_fq, backlight_store_pwm_fq),
106+ __ATTR(min_duty, 0666, backlight_show_min_duty, backlight_store_min_duty),
107 __ATTR_NULL,
108 };
109
110diff --git a/include/linux/backlight.h b/include/linux/backlight.h
111index 0f5f578..f3a9b9f 100644
112--- a/include/linux/backlight.h
113+++ b/include/linux/backlight.h
114@@ -64,6 +64,9 @@ struct backlight_properties {
115 int fb_blank;
116 /* Flags used to signal drivers of state changes */
117 /* Upper 4 bits are reserved for driver internal use */
118+ int boost;
119+ int pwm_fq;
120+ int min_duty;
121 unsigned int state;
122
123 #define BL_CORE_SUSPENDED (1 << 0) /* backlight is suspended */
124--
1251.6.6.1
126
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0015-Forward-port-TWL4030-BCI-driver-from-2.6.29-to-2.6.3.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0015-Forward-port-TWL4030-BCI-driver-from-2.6.29-to-2.6.3.patch
new file mode 100644
index 00000000..562c459e
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0015-Forward-port-TWL4030-BCI-driver-from-2.6.29-to-2.6.3.patch
@@ -0,0 +1,1367 @@
1From c3a08f3d696866508ef2b5e2fd065b8295b3e1a8 Mon Sep 17 00:00:00 2001
2From: Tim Yamin <plasm@roo.me.uk>
3Date: Sun, 9 May 2010 10:14:23 +0200
4Subject: [PATCH 15/17] Forward port TWL4030 BCI driver from 2.6.29 to 2.6.31 with AI enhancements.
5
6Signed-off-by: Tim Yamin <plasm@roo.me.uk>
7---
8 drivers/power/Kconfig | 7 +
9 drivers/power/Makefile | 1 +
10 drivers/power/twl4030_bci_battery.c | 1307 +++++++++++++++++++++++++++++++++++
11 include/linux/i2c/twl.h | 1 +
12 4 files changed, 1316 insertions(+), 0 deletions(-)
13 create mode 100644 drivers/power/twl4030_bci_battery.c
14
15diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
16index d4b3d67..8345b3f 100644
17--- a/drivers/power/Kconfig
18+++ b/drivers/power/Kconfig
19@@ -124,4 +124,11 @@ config CHARGER_PCF50633
20 help
21 Say Y to include support for NXP PCF50633 Main Battery Charger.
22
23+config TWL4030_BCI_BATTERY
24+ tristate "OMAP TWL4030 BCI Battery driver"
25+ depends on TWL4030_CORE && TWL4030_MADC
26+ help
27+ Support for OMAP TWL4030 BCI Battery driver.
28+ This driver can give support for TWL4030 Battery Charge Interface.
29+
30 endif # POWER_SUPPLY
31diff --git a/drivers/power/Makefile b/drivers/power/Makefile
32index 573597c..7801da7 100644
33--- a/drivers/power/Makefile
34+++ b/drivers/power/Makefile
35@@ -31,3 +31,4 @@ obj-$(CONFIG_BATTERY_BQ27x00) += bq27x00_battery.o
36 obj-$(CONFIG_BATTERY_DA9030) += da9030_battery.o
37 obj-$(CONFIG_BATTERY_MAX17040) += max17040_battery.o
38 obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o
39+obj-$(CONFIG_TWL4030_BCI_BATTERY) += twl4030_bci_battery.o
40diff --git a/drivers/power/twl4030_bci_battery.c b/drivers/power/twl4030_bci_battery.c
41new file mode 100644
42index 0000000..0876fc3
43--- /dev/null
44+++ b/drivers/power/twl4030_bci_battery.c
45@@ -0,0 +1,1307 @@
46+/*
47+ * linux/drivers/power/twl4030_bci_battery.c
48+ *
49+ * OMAP2430/3430 BCI battery driver for Linux
50+ *
51+ * Copyright (C) 2008 Texas Instruments, Inc.
52+ * Author: Texas Instruments, Inc.
53+ *
54+ * Copyright (C) 2010 Always Innovating
55+ * Author: Tim Yamin <plasm@roo.me.uk>
56+ *
57+ * This package is free software; you can redistribute it and/or modify
58+ * it under the terms of the GNU General Public License version 2 as
59+ * published by the Free Software Foundation.
60+ *
61+ * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
62+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
63+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
64+ */
65+
66+/* Boot with automatic charge */
67+#define CHARGE_MODE 1
68+
69+#include <linux/init.h>
70+#include <linux/module.h>
71+#include <linux/device.h>
72+#include <linux/interrupt.h>
73+#include <linux/delay.h>
74+#include <linux/platform_device.h>
75+#include <linux/i2c/twl.h>
76+#include <linux/power_supply.h>
77+#include <linux/i2c/twl4030-madc.h>
78+
79+#define T2_BATTERY_VOLT 0x04
80+#define T2_BATTERY_TEMP 0x06
81+#define T2_BATTERY_CUR 0x08
82+
83+/* charger constants */
84+#define NO_PW_CONN 0
85+#define AC_PW_CONN 0x01
86+#define USB_PW_CONN 0x02
87+
88+/* TWL4030_MODULE_USB */
89+#define REG_POWER_CTRL 0x0AC
90+#define OTG_EN 0x020
91+#define REG_PHY_CLK_CTRL 0x0FE
92+#define REG_PHY_CLK_CTRL_STS 0x0FF
93+#define PHY_DPLL_CLK 0x01
94+
95+#define REG_BCICTL1 0x023
96+#define REG_BCICTL2 0x024
97+#define CGAIN 0x020
98+#define ITHEN 0x010
99+#define ITHSENS 0x007
100+
101+/* Boot BCI flag bits */
102+#define BCIAUTOWEN 0x020
103+#define CONFIG_DONE 0x010
104+#define CVENAC 0x004
105+#define BCIAUTOUSB 0x002
106+#define BCIAUTOAC 0x001
107+#define BCIMSTAT_MASK 0x03F
108+
109+/* Boot BCI register */
110+#define REG_BOOT_BCI 0x007
111+#define REG_CTRL1 0x00
112+#define REG_SW1SELECT_MSB 0x07
113+#define SW1_CH9_SEL 0x02
114+#define REG_CTRL_SW1 0x012
115+#define SW1_TRIGGER 0x020
116+#define EOC_SW1 0x002
117+#define REG_GPCH9 0x049
118+#define REG_STS_HW_CONDITIONS 0x0F
119+#define STS_VBUS 0x080
120+#define STS_CHG 0x02
121+#define REG_BCIMSTATEC 0x02
122+#define REG_BCIMFSTS4 0x010
123+#define REG_BCIMFSTS2 0x00E
124+#define REG_BCIMFSTS3 0x00F
125+#define REG_BCIMFSTS1 0x001
126+#define USBFASTMCHG 0x004
127+#define BATSTSPCHG 0x004
128+#define BATSTSMCHG 0x040
129+#define VBATOV4 0x020
130+#define VBATOV3 0x010
131+#define VBATOV2 0x008
132+#define VBATOV1 0x004
133+#define REG_BB_CFG 0x012
134+#define BBCHEN 0x010
135+
136+/* GPBR */
137+#define REG_GPBR1 0x0c
138+#define MADC_HFCLK_EN 0x80
139+#define DEFAULT_MADC_CLK_EN 0x10
140+
141+/* Power supply charge interrupt */
142+#define REG_PWR_ISR1 0x00
143+#define REG_PWR_IMR1 0x01
144+#define REG_PWR_EDR1 0x05
145+#define REG_PWR_SIH_CTRL 0x007
146+
147+#define USB_PRES 0x004
148+#define CHG_PRES 0x002
149+
150+#define USB_PRES_RISING 0x020
151+#define USB_PRES_FALLING 0x010
152+#define CHG_PRES_RISING 0x008
153+#define CHG_PRES_FALLING 0x004
154+#define AC_STATEC 0x20
155+#define COR 0x004
156+
157+/* interrupt status registers */
158+#define REG_BCIISR1A 0x0
159+#define REG_BCIISR2A 0x01
160+
161+/* Interrupt flags bits BCIISR1 */
162+#define BATSTS_ISR1 0x080
163+#define VBATLVL_ISR1 0x001
164+
165+/* Interrupt mask registers for int1*/
166+#define REG_BCIIMR1A 0x002
167+#define REG_BCIIMR2A 0x003
168+
169+ /* Interrupt masks for BCIIMR1 */
170+#define BATSTS_IMR1 0x080
171+#define VBATLVL_IMR1 0x001
172+
173+/* Interrupt edge detection register */
174+#define REG_BCIEDR1 0x00A
175+#define REG_BCIEDR2 0x00B
176+#define REG_BCIEDR3 0x00C
177+
178+/* BCIEDR2 */
179+#define BATSTS_EDRRISIN 0x080
180+#define BATSTS_EDRFALLING 0x040
181+
182+/* BCIEDR3 */
183+#define VBATLVL_EDRRISIN 0x02
184+
185+/* BCIIREF1 */
186+#define REG_BCIIREF1 0x027
187+#define REG_BCIIREF2 0x028
188+
189+/* BCIMFTH1 */
190+#define REG_BCIMFTH1 0x016
191+
192+/* Key */
193+#define KEY_IIREF 0xE7
194+#define KEY_FTH1 0xD2
195+#define REG_BCIMFKEY 0x011
196+
197+/* Step size and prescaler ratio */
198+#define TEMP_STEP_SIZE 147
199+#define TEMP_PSR_R 100
200+
201+#define VOLT_STEP_SIZE 588
202+#define VOLT_PSR_R 100
203+
204+#define CURR_STEP_SIZE 147
205+#define CURR_PSR_R1 44
206+#define CURR_PSR_R2 80
207+
208+#define BK_VOLT_STEP_SIZE 441
209+#define BK_VOLT_PSR_R 100
210+
211+#define ENABLE 1
212+#define DISABLE 1
213+
214+struct twl4030_bci_device_info {
215+ struct device *dev;
216+
217+ unsigned long update_time;
218+ int voltage_uV;
219+ int bk_voltage_uV;
220+ int current_uA;
221+ int temp_C;
222+ int charge_rsoc;
223+ int charge_status;
224+
225+ struct power_supply bat;
226+ struct power_supply bk_bat;
227+ struct delayed_work twl4030_bci_monitor_work;
228+ struct delayed_work twl4030_bk_bci_monitor_work;
229+
230+ struct twl4030_bci_platform_data *pdata;
231+};
232+
233+static int usb_charger_flag;
234+static int LVL_1, LVL_2, LVL_3, LVL_4;
235+
236+static int read_bci_val(u8 reg_1);
237+static inline int clear_n_set(u8 mod_no, u8 clear, u8 set, u8 reg);
238+static int twl4030charger_presence(void);
239+
240+/*
241+ * Report and clear the charger presence event.
242+ */
243+static inline int twl4030charger_presence_evt(void)
244+{
245+ int ret;
246+ u8 chg_sts, set = 0, clear = 0;
247+
248+ /* read charger power supply status */
249+ ret = twl_i2c_read_u8(TWL4030_MODULE_PM_MASTER, &chg_sts,
250+ REG_STS_HW_CONDITIONS);
251+ if (ret)
252+ return IRQ_NONE;
253+
254+ if (chg_sts & STS_CHG) { /* If the AC charger have been connected */
255+ /* configuring falling edge detection for CHG_PRES */
256+ set = CHG_PRES_FALLING;
257+ clear = CHG_PRES_RISING;
258+ } else { /* If the AC charger have been disconnected */
259+ /* configuring rising edge detection for CHG_PRES */
260+ set = CHG_PRES_RISING;
261+ clear = CHG_PRES_FALLING;
262+ }
263+
264+ /* Update the interrupt edge detection register */
265+ clear_n_set(TWL4030_MODULE_INT, clear, set, REG_PWR_EDR1);
266+
267+ return 0;
268+}
269+
270+/*
271+ * Interrupt service routine
272+ *
273+ * Attends to TWL 4030 power module interruptions events, specifically
274+ * USB_PRES (USB charger presence) CHG_PRES (AC charger presence) events
275+ *
276+ */
277+static irqreturn_t twl4030charger_interrupt(int irq, void *_di)
278+{
279+ struct twl4030_bci_device_info *di = _di;
280+
281+#ifdef CONFIG_LOCKDEP
282+ /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
283+ * we don't want and can't tolerate. Although it might be
284+ * friendlier not to borrow this thread context...
285+ */
286+ local_irq_enable();
287+#endif
288+
289+ twl4030charger_presence_evt();
290+ power_supply_changed(&di->bat);
291+
292+ return IRQ_HANDLED;
293+}
294+
295+/*
296+ * This function handles the twl4030 battery presence interrupt
297+ */
298+static int twl4030battery_presence_evt(void)
299+{
300+ int ret;
301+ u8 batstsmchg, batstspchg;
302+
303+ /* check for the battery presence in main charge*/
304+ ret = twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE,
305+ &batstsmchg, REG_BCIMFSTS3);
306+ if (ret)
307+ return ret;
308+
309+ /* check for the battery presence in precharge */
310+ ret = twl_i2c_read_u8(TWL4030_MODULE_PRECHARGE,
311+ &batstspchg, REG_BCIMFSTS1);
312+ if (ret)
313+ return ret;
314+
315+ /*
316+ * REVISIT: Physically inserting/removing the batt
317+ * does not seem to generate an int on 3430ES2 SDP.
318+ */
319+ if ((batstspchg & BATSTSPCHG) || (batstsmchg & BATSTSMCHG)) {
320+ /* In case of the battery insertion event */
321+ ret = clear_n_set(TWL4030_MODULE_INTERRUPTS, BATSTS_EDRRISIN,
322+ BATSTS_EDRFALLING, REG_BCIEDR2);
323+ if (ret)
324+ return ret;
325+ } else {
326+ /* In case of the battery removal event */
327+ ret = clear_n_set(TWL4030_MODULE_INTERRUPTS, BATSTS_EDRFALLING,
328+ BATSTS_EDRRISIN, REG_BCIEDR2);
329+ if (ret)
330+ return ret;
331+ }
332+
333+ return 0;
334+}
335+
336+/*
337+ * This function handles the twl4030 battery voltage level interrupt.
338+ */
339+static int twl4030battery_level_evt(void)
340+{
341+ int ret;
342+ u8 mfst;
343+
344+ /* checking for threshold event */
345+ ret = twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE,
346+ &mfst, REG_BCIMFSTS2);
347+ if (ret)
348+ return ret;
349+
350+ /* REVISIT could use a bitmap */
351+ if (mfst & VBATOV4) {
352+ LVL_4 = 1;
353+ LVL_3 = 0;
354+ LVL_2 = 0;
355+ LVL_1 = 0;
356+ } else if (mfst & VBATOV3) {
357+ LVL_4 = 0;
358+ LVL_3 = 1;
359+ LVL_2 = 0;
360+ LVL_1 = 0;
361+ } else if (mfst & VBATOV2) {
362+ LVL_4 = 0;
363+ LVL_3 = 0;
364+ LVL_2 = 1;
365+ LVL_1 = 0;
366+ } else {
367+ LVL_4 = 0;
368+ LVL_3 = 0;
369+ LVL_2 = 0;
370+ LVL_1 = 1;
371+ }
372+
373+ return 0;
374+}
375+
376+/*
377+ * Interrupt service routine
378+ *
379+ * Attends to BCI interruptions events,
380+ * specifically BATSTS (battery connection and removal)
381+ * VBATOV (main battery voltage threshold) events
382+ *
383+ */
384+static irqreturn_t twl4030battery_interrupt(int irq, void *_di)
385+{
386+ u8 isr1a_val, isr2a_val, clear_2a, clear_1a;
387+ int ret;
388+
389+#ifdef CONFIG_LOCKDEP
390+ /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
391+ * we don't want and can't tolerate. Although it might be
392+ * friendlier not to borrow this thread context...
393+ */
394+ local_irq_enable();
395+#endif
396+
397+ ret = twl_i2c_read_u8(TWL4030_MODULE_INTERRUPTS, &isr1a_val,
398+ REG_BCIISR1A);
399+ if (ret)
400+ return IRQ_NONE;
401+
402+ ret = twl_i2c_read_u8(TWL4030_MODULE_INTERRUPTS, &isr2a_val,
403+ REG_BCIISR2A);
404+ if (ret)
405+ return IRQ_NONE;
406+
407+ clear_2a = (isr2a_val & VBATLVL_ISR1) ? (VBATLVL_ISR1) : 0;
408+ clear_1a = (isr1a_val & BATSTS_ISR1) ? (BATSTS_ISR1) : 0;
409+
410+ /* cleaning BCI interrupt status flags */
411+ ret = twl_i2c_write_u8(TWL4030_MODULE_INTERRUPTS,
412+ clear_1a , REG_BCIISR1A);
413+ if (ret)
414+ return IRQ_NONE;
415+
416+ ret = twl_i2c_write_u8(TWL4030_MODULE_INTERRUPTS,
417+ clear_2a , REG_BCIISR2A);
418+ if (ret)
419+ return IRQ_NONE;
420+
421+ /* battery connetion or removal event */
422+ if (isr1a_val & BATSTS_ISR1)
423+ twl4030battery_presence_evt();
424+ /* battery voltage threshold event*/
425+ else if (isr2a_val & VBATLVL_ISR1)
426+ twl4030battery_level_evt();
427+ else
428+ return IRQ_NONE;
429+
430+ return IRQ_HANDLED;
431+}
432+
433+/*
434+ * Enable/Disable hardware battery level event notifications.
435+ */
436+static int twl4030battery_hw_level_en(int enable)
437+{
438+ int ret;
439+
440+ if (enable) {
441+ /* unmask VBATOV interrupt for INT1 */
442+ ret = clear_n_set(TWL4030_MODULE_INTERRUPTS, VBATLVL_IMR1,
443+ 0, REG_BCIIMR2A);
444+ if (ret)
445+ return ret;
446+
447+ /* configuring interrupt edge detection for VBATOv */
448+ ret = clear_n_set(TWL4030_MODULE_INTERRUPTS, 0,
449+ VBATLVL_EDRRISIN, REG_BCIEDR3);
450+ if (ret)
451+ return ret;
452+ } else {
453+ /* mask VBATOV interrupt for INT1 */
454+ ret = clear_n_set(TWL4030_MODULE_INTERRUPTS, 0,
455+ VBATLVL_IMR1, REG_BCIIMR2A);
456+ if (ret)
457+ return ret;
458+ }
459+
460+ return 0;
461+}
462+
463+/*
464+ * Enable/disable hardware battery presence event notifications.
465+ */
466+static int twl4030battery_hw_presence_en(int enable)
467+{
468+ int ret;
469+
470+ if (enable) {
471+ /* unmask BATSTS interrupt for INT1 */
472+ ret = clear_n_set(TWL4030_MODULE_INTERRUPTS, BATSTS_IMR1,
473+ 0, REG_BCIIMR1A);
474+ if (ret)
475+ return ret;
476+
477+ /* configuring interrupt edge for BATSTS */
478+ ret = clear_n_set(TWL4030_MODULE_INTERRUPTS, 0,
479+ BATSTS_EDRRISIN | BATSTS_EDRFALLING, REG_BCIEDR2);
480+ if (ret)
481+ return ret;
482+ } else {
483+ /* mask BATSTS interrupt for INT1 */
484+ ret = clear_n_set(TWL4030_MODULE_INTERRUPTS, 0,
485+ BATSTS_IMR1, REG_BCIIMR1A);
486+ if (ret)
487+ return ret;
488+ }
489+
490+ return 0;
491+}
492+
493+/*
494+ * Enable/Disable AC Charge funtionality.
495+ */
496+static int twl4030charger_ac_en(int enable, int automatic)
497+{
498+ int ret;
499+
500+ if (enable) {
501+ /* forcing the field BCIAUTOAC (BOOT_BCI[0) to 1 */
502+ if(!automatic) {
503+ ret = clear_n_set(TWL4030_MODULE_PM_MASTER, BCIAUTOAC | CVENAC,
504+ (CONFIG_DONE | BCIAUTOWEN),
505+ REG_BOOT_BCI);
506+ } else {
507+ ret = clear_n_set(TWL4030_MODULE_PM_MASTER, 0,
508+ (CONFIG_DONE | BCIAUTOWEN | BCIAUTOAC | CVENAC),
509+ REG_BOOT_BCI);
510+ }
511+ if (ret)
512+ return ret;
513+ } else {
514+ /* forcing the field BCIAUTOAC (BOOT_BCI[0) to 0*/
515+ ret = clear_n_set(TWL4030_MODULE_PM_MASTER, BCIAUTOAC,
516+ (CONFIG_DONE | BCIAUTOWEN),
517+ REG_BOOT_BCI);
518+ if (ret)
519+ return ret;
520+ }
521+
522+ return 0;
523+}
524+
525+/*
526+ * Enable/Disable USB Charge funtionality.
527+ */
528+int twl4030charger_usb_en(int enable)
529+{
530+ u8 value;
531+ int ret;
532+ unsigned long timeout;
533+
534+ if (enable) {
535+ /* Check for USB charger conneted */
536+ ret = twl4030charger_presence();
537+ if (ret < 0)
538+ return ret;
539+
540+ if (!(ret & USB_PW_CONN))
541+ return -ENXIO;
542+
543+ /* forcing the field BCIAUTOUSB (BOOT_BCI[1]) to 1 */
544+ ret = clear_n_set(TWL4030_MODULE_PM_MASTER, 0,
545+ (CONFIG_DONE | BCIAUTOWEN | BCIAUTOUSB),
546+ REG_BOOT_BCI);
547+ if (ret)
548+ return ret;
549+
550+ ret = clear_n_set(TWL4030_MODULE_USB, 0, PHY_DPLL_CLK,
551+ REG_PHY_CLK_CTRL);
552+ if (ret)
553+ return ret;
554+
555+ value = 0;
556+ timeout = jiffies + msecs_to_jiffies(50);
557+
558+ while ((!(value & PHY_DPLL_CLK)) &&
559+ time_before(jiffies, timeout)) {
560+ udelay(10);
561+ ret = twl_i2c_read_u8(TWL4030_MODULE_USB, &value,
562+ REG_PHY_CLK_CTRL_STS);
563+ if (ret)
564+ return ret;
565+ }
566+
567+ /* OTG_EN (POWER_CTRL[5]) to 1 */
568+ ret = clear_n_set(TWL4030_MODULE_USB, 0, OTG_EN,
569+ REG_POWER_CTRL);
570+ if (ret)
571+ return ret;
572+
573+ mdelay(50);
574+
575+ /* forcing USBFASTMCHG(BCIMFSTS4[2]) to 1 */
576+ ret = clear_n_set(TWL4030_MODULE_MAIN_CHARGE, 0,
577+ USBFASTMCHG, REG_BCIMFSTS4);
578+ if (ret)
579+ return ret;
580+ } else {
581+ twl4030charger_presence();
582+ ret = clear_n_set(TWL4030_MODULE_PM_MASTER, BCIAUTOUSB,
583+ (CONFIG_DONE | BCIAUTOWEN), REG_BOOT_BCI);
584+ if (ret)
585+ return ret;
586+ }
587+
588+ return 0;
589+}
590+
591+/*
592+ * Return battery temperature
593+ * Or < 0 on failure.
594+ */
595+static int twl4030battery_temperature(struct twl4030_bci_device_info *di)
596+{
597+ u8 val;
598+ int temp, curr, volt, res, ret;
599+
600+ /* Is a temperature table specified? */
601+ if (!di->pdata->tblsize)
602+ return 0;
603+
604+ /* Getting and calculating the thermistor voltage */
605+ ret = read_bci_val(T2_BATTERY_TEMP);
606+ if (ret < 0)
607+ return ret;
608+
609+ volt = (ret * TEMP_STEP_SIZE) / TEMP_PSR_R;
610+
611+ /* Getting and calculating the supply current in micro ampers */
612+ ret = twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &val,
613+ REG_BCICTL2);
614+ if (ret)
615+ return 0;
616+
617+ curr = ((val & ITHSENS) + 1) * 10;
618+
619+ /* Getting and calculating the thermistor resistance in ohms*/
620+ res = volt * 1000 / curr;
621+
622+ /*calculating temperature*/
623+ for (temp = 58; temp >= 0; temp--) {
624+ int actual = di->pdata->battery_tmp_tbl[temp];
625+ if ((actual - res) >= 0)
626+ break;
627+ }
628+
629+ /* Negative temperature */
630+ if (temp < 3) {
631+ if (temp == 2)
632+ temp = -1;
633+ else if (temp == 1)
634+ temp = -2;
635+ else
636+ temp = -3;
637+ }
638+
639+ return temp + 1;
640+}
641+
642+/*
643+ * Return battery voltage
644+ * Or < 0 on failure.
645+ */
646+static int twl4030battery_voltage(void)
647+{
648+ int volt = read_bci_val(T2_BATTERY_VOLT);
649+ return (volt * VOLT_STEP_SIZE) / VOLT_PSR_R;
650+}
651+
652+/*
653+ * Get latest battery voltage (using MADC)
654+ *
655+ * When the BCI is not charging, the BCI voltage registers are not
656+ * updated and are 'frozen' but the data can be read through the
657+ * MADC.
658+ */
659+static int twl4030battery_voltage_madc(void)
660+{
661+ struct twl4030_madc_request req;
662+
663+ req.channels = (1 << 12);
664+ req.do_avg = 0;
665+ req.method = TWL4030_MADC_SW1;
666+ req.active = 0;
667+ req.func_cb = NULL;
668+ twl4030_madc_conversion(&req);
669+
670+ return (((int) req.rbuf[12]) * VOLT_STEP_SIZE) / VOLT_PSR_R;
671+}
672+
673+/*
674+ * Return the battery current
675+ * Or < 0 on failure.
676+ */
677+static int twl4030battery_current(void)
678+{
679+ int ret, curr = read_bci_val(T2_BATTERY_CUR);
680+ u8 val;
681+
682+ ret = twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &val,
683+ REG_BCICTL1);
684+ if (ret)
685+ return ret;
686+
687+ if (val & CGAIN) /* slope of 0.44 mV/mA */
688+ return (curr * CURR_STEP_SIZE) / CURR_PSR_R1;
689+ else /* slope of 0.88 mV/mA */
690+ return (curr * CURR_STEP_SIZE) / CURR_PSR_R2;
691+}
692+
693+/*
694+ * Return the battery backup voltage
695+ * Or < 0 on failure.
696+ */
697+static int twl4030backupbatt_voltage(void)
698+{
699+ struct twl4030_madc_request req;
700+ int temp;
701+
702+ req.channels = (1 << 9);
703+ req.do_avg = 0;
704+ req.method = TWL4030_MADC_SW1;
705+ req.active = 0;
706+ req.func_cb = NULL;
707+ twl4030_madc_conversion(&req);
708+ temp = (u16)req.rbuf[9];
709+
710+ return (temp * BK_VOLT_STEP_SIZE) / BK_VOLT_PSR_R;
711+}
712+
713+/*
714+ * Returns an integer value, that means,
715+ * NO_PW_CONN no power supply is connected
716+ * AC_PW_CONN if the AC power supply is connected
717+ * USB_PW_CONN if the USB power supply is connected
718+ * AC_PW_CONN + USB_PW_CONN if USB and AC power supplies are both connected
719+ *
720+ * Or < 0 on failure.
721+ */
722+static int twl4030charger_presence(void)
723+{
724+ int ret;
725+ u8 hwsts;
726+
727+ ret = twl_i2c_read_u8(TWL4030_MODULE_PM_MASTER, &hwsts,
728+ REG_STS_HW_CONDITIONS);
729+ if (ret) {
730+ pr_err("twl4030_bci: error reading STS_HW_CONDITIONS\n");
731+ return ret;
732+ }
733+
734+ ret = (hwsts & STS_CHG) ? AC_PW_CONN : NO_PW_CONN;
735+ ret += (hwsts & STS_VBUS) ? USB_PW_CONN : NO_PW_CONN;
736+
737+ if (ret & USB_PW_CONN)
738+ usb_charger_flag = 1;
739+ else
740+ usb_charger_flag = 0;
741+
742+ return ret;
743+
744+}
745+
746+/*
747+ * Returns the main charge FSM status
748+ * Or < 0 on failure.
749+ */
750+static int twl4030bci_status(void)
751+{
752+ int ret;
753+ u8 status;
754+
755+ ret = twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE,
756+ &status, REG_BCIMSTATEC);
757+ if (ret) {
758+ pr_err("twl4030_bci: error reading BCIMSTATEC\n");
759+ return ret;
760+ }
761+
762+#ifdef DEBUG
763+ printk("BCI DEBUG: BCIMSTATEC Charge state is 0x%x\n", status);
764+#endif
765+ return (int) (status & BCIMSTAT_MASK);
766+}
767+
768+static int read_bci_val(u8 reg)
769+{
770+ int ret, temp;
771+ u8 val;
772+
773+ /* reading MSB */
774+ ret = twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &val,
775+ reg + 1);
776+ if (ret)
777+ return ret;
778+
779+ temp = ((int)(val & 0x03)) << 8;
780+
781+ /* reading LSB */
782+ ret = twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &val,
783+ reg);
784+ if (ret)
785+ return ret;
786+
787+ return temp | val;
788+}
789+
790+/*
791+ * Settup the twl4030 BCI module to enable backup
792+ * battery charging.
793+ */
794+static int twl4030backupbatt_voltage_setup(void)
795+{
796+ int ret;
797+
798+ /* Starting backup batery charge */
799+ ret = clear_n_set(TWL4030_MODULE_PM_RECEIVER, 0, BBCHEN,
800+ REG_BB_CFG);
801+ if (ret)
802+ return ret;
803+
804+ return 0;
805+}
806+
807+/*
808+ * Settup the twl4030 BCI module to measure battery
809+ * temperature
810+ */
811+static int twl4030battery_temp_setup(void)
812+{
813+#ifdef DEBUG
814+ u8 i;
815+#endif
816+ u8 ret;
817+
818+ /* Enabling thermistor current */
819+ ret = clear_n_set(TWL4030_MODULE_MAIN_CHARGE, 0, 0x1B,
820+ REG_BCICTL1);
821+ if (ret)
822+ return ret;
823+
824+#ifdef DEBUG
825+ twl_i2c_read_u8(TWL4030_MODULE_PM_MASTER, &ret, REG_BOOT_BCI);
826+ printk("BCI DEBUG: BOOT_BCI Value is 0x%x\n", ret);
827+
828+ twl_i2c_read_u8(TWL4030_MODULE_PM_MASTER, &ret, REG_STS_HW_CONDITIONS);
829+ printk("BCI DEBUG: STS_HW_CONDITIONS Value is 0x%x\n", ret);
830+
831+ twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &ret, REG_BCICTL1);
832+ printk("BCI DEBUG: BCICTL1 Value is 0x%x\n", ret);
833+
834+ twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &ret, REG_BCICTL2);
835+ printk("BCI DEBUG: BCICTL2 Value is 0x%x\n", ret);
836+
837+ twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &ret, 0x0);
838+ printk("BCI DEBUG: BCIMDEN Value is 0x%x\n", ret);
839+
840+ twl_i2c_read_u8(TWL4030_MODULE_INTBR, &ret, REG_GPBR1);
841+ printk("BCI DEBUG: GPBR1 Value is 0x%x\n", ret);
842+
843+ for(i = 0x0; i <= 0x32; i++)
844+ {
845+ twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &ret, i);
846+ printk("BCI DEBUG: BCI 0x%x Value is 0x%x\n", i, ret);
847+ }
848+#endif
849+
850+ return 0;
851+}
852+
853+/*
854+ * Sets and clears bits on an given register on a given module
855+ */
856+static inline int clear_n_set(u8 mod_no, u8 clear, u8 set, u8 reg)
857+{
858+ int ret;
859+ u8 val = 0;
860+
861+ /* Gets the initial register value */
862+ ret = twl_i2c_read_u8(mod_no, &val, reg);
863+ if (ret)
864+ return ret;
865+ /* Clearing all those bits to clear */
866+ val &= ~(clear);
867+
868+ /* Setting all those bits to set */
869+ val |= set;
870+
871+ /* Update the register */
872+ ret = twl_i2c_write_u8(mod_no, val, reg);
873+ if (ret)
874+ return ret;
875+
876+ return 0;
877+}
878+
879+static enum power_supply_property twl4030_bci_battery_props[] = {
880+ POWER_SUPPLY_PROP_STATUS,
881+ POWER_SUPPLY_PROP_ONLINE,
882+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
883+ POWER_SUPPLY_PROP_CURRENT_NOW,
884+ POWER_SUPPLY_PROP_CAPACITY,
885+ POWER_SUPPLY_PROP_TEMP,
886+};
887+
888+static enum power_supply_property twl4030_bk_bci_battery_props[] = {
889+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
890+};
891+
892+static void
893+twl4030_bk_bci_battery_read_status(struct twl4030_bci_device_info *di)
894+{
895+ di->bk_voltage_uV = twl4030backupbatt_voltage();
896+}
897+
898+static void twl4030_bk_bci_battery_work(struct work_struct *work)
899+{
900+ struct twl4030_bci_device_info *di = container_of(work,
901+ struct twl4030_bci_device_info,
902+ twl4030_bk_bci_monitor_work.work);
903+
904+ if(!di->pdata->no_backup_battery)
905+ twl4030_bk_bci_battery_read_status(di);
906+ schedule_delayed_work(&di->twl4030_bk_bci_monitor_work, 500);
907+}
908+
909+static void twl4030_bci_battery_read_status(struct twl4030_bci_device_info *di)
910+{
911+ if(di->charge_status != POWER_SUPPLY_STATUS_DISCHARGING) {
912+ di->temp_C = twl4030battery_temperature(di);
913+ di->voltage_uV = twl4030battery_voltage();
914+ di->current_uA = twl4030battery_current();
915+ }
916+}
917+
918+static void
919+twl4030_bci_battery_update_status(struct twl4030_bci_device_info *di)
920+{
921+ if (power_supply_am_i_supplied(&di->bat))
922+ di->charge_status = POWER_SUPPLY_STATUS_CHARGING;
923+ else
924+ di->charge_status = POWER_SUPPLY_STATUS_DISCHARGING;
925+ twl4030_bci_battery_read_status(di);
926+}
927+
928+static void twl4030_bci_battery_work(struct work_struct *work)
929+{
930+ struct twl4030_bci_device_info *di = container_of(work,
931+ struct twl4030_bci_device_info, twl4030_bci_monitor_work.work);
932+
933+ twl4030_bci_battery_update_status(di);
934+ schedule_delayed_work(&di->twl4030_bci_monitor_work, 100);
935+}
936+
937+
938+#define to_twl4030_bci_device_info(x) container_of((x), \
939+ struct twl4030_bci_device_info, bat);
940+
941+static void twl4030_bci_battery_external_power_changed(struct power_supply *psy)
942+{
943+ struct twl4030_bci_device_info *di = to_twl4030_bci_device_info(psy);
944+
945+ cancel_delayed_work(&di->twl4030_bci_monitor_work);
946+ schedule_delayed_work(&di->twl4030_bci_monitor_work, 0);
947+}
948+
949+#define to_twl4030_bk_bci_device_info(x) container_of((x), \
950+ struct twl4030_bci_device_info, bk_bat);
951+
952+static ssize_t
953+show_charge_current(struct device *dev, struct device_attribute *attr, char *buf)
954+{
955+ u8 ctl;
956+ int ret = read_bci_val(REG_BCIIREF1) & 0x1FF;
957+ twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &ctl, REG_BCICTL1);
958+
959+ if (ctl & CGAIN)
960+ ret |= 0x200;
961+
962+#ifdef DEBUG
963+ /* Dump debug */
964+ twl4030battery_temp_setup();
965+#endif
966+
967+ return sprintf(buf, "%d\n", ret);
968+}
969+
970+static ssize_t
971+set_charge_current(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
972+{
973+ unsigned long newCurrent;
974+ int ret;
975+
976+ ret = strict_strtoul(buf, 10, &newCurrent);
977+ if (ret)
978+ return -EINVAL;
979+
980+ ret = twl_i2c_write_u8(TWL4030_MODULE_MAIN_CHARGE, KEY_IIREF, REG_BCIMFKEY);
981+ if (ret)
982+ return ret;
983+
984+ ret = twl_i2c_write_u8(TWL4030_MODULE_MAIN_CHARGE, newCurrent & 0xff, REG_BCIIREF1);
985+ if (ret)
986+ return ret;
987+
988+ ret = twl_i2c_write_u8(TWL4030_MODULE_MAIN_CHARGE, KEY_IIREF, REG_BCIMFKEY);
989+ if (ret)
990+ return ret;
991+
992+ ret = twl_i2c_write_u8(TWL4030_MODULE_MAIN_CHARGE, (newCurrent >> 8) & 0x1, REG_BCIIREF2);
993+ if (ret)
994+ return ret;
995+
996+ /* Set software-controlled charge */
997+ twl4030charger_ac_en(ENABLE, 0);
998+
999+ /* Set CGAIN = 0 or 1 */
1000+ if(newCurrent > 511) {
1001+ u8 tmp;
1002+
1003+ /* Set CGAIN = 1 -- need to wait until automatic charge turns off */
1004+ while(!ret) {
1005+ clear_n_set(TWL4030_MODULE_MAIN_CHARGE, 0, CGAIN | 0x1B, REG_BCICTL1);
1006+ twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &tmp, REG_BCICTL1);
1007+
1008+ ret = tmp & CGAIN;
1009+ if(!ret)
1010+ mdelay(50);
1011+ }
1012+ } else {
1013+ u8 tmp;
1014+
1015+ /* Set CGAIN = 0 -- need to wait until automatic charge turns off */
1016+ while(!ret) {
1017+ clear_n_set(TWL4030_MODULE_MAIN_CHARGE, CGAIN, 0x1B, REG_BCICTL1);
1018+ twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &tmp, REG_BCICTL1);
1019+
1020+ ret = !(tmp & CGAIN);
1021+ if(!ret)
1022+ mdelay(50);
1023+ }
1024+ }
1025+
1026+ /* Set automatic charge (CGAIN = 0/1 persists) */
1027+ twl4030charger_ac_en(ENABLE, 1);
1028+
1029+ return count;
1030+}
1031+
1032+static ssize_t
1033+show_voltage(struct device *dev, struct device_attribute *attr, char *buf)
1034+{
1035+ return sprintf(buf, "%d\n", twl4030battery_voltage_madc());
1036+}
1037+
1038+static DEVICE_ATTR(charge_current, S_IRUGO | S_IWUGO, show_charge_current, set_charge_current);
1039+static DEVICE_ATTR(voltage_now_madc, S_IRUGO, show_voltage, NULL);
1040+
1041+static int twl4030_bk_bci_battery_get_property(struct power_supply *psy,
1042+ enum power_supply_property psp,
1043+ union power_supply_propval *val)
1044+{
1045+ struct twl4030_bci_device_info *di = to_twl4030_bk_bci_device_info(psy);
1046+
1047+ switch (psp) {
1048+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
1049+ val->intval = di->bk_voltage_uV;
1050+ break;
1051+ default:
1052+ return -EINVAL;
1053+ }
1054+
1055+ return 0;
1056+}
1057+
1058+static int twl4030_bci_battery_get_property(struct power_supply *psy,
1059+ enum power_supply_property psp,
1060+ union power_supply_propval *val)
1061+{
1062+ struct twl4030_bci_device_info *di;
1063+ int status = 0;
1064+
1065+ di = to_twl4030_bci_device_info(psy);
1066+
1067+ switch (psp) {
1068+ case POWER_SUPPLY_PROP_STATUS:
1069+ val->intval = di->charge_status;
1070+ return 0;
1071+ default:
1072+ break;
1073+ }
1074+
1075+ switch (psp) {
1076+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
1077+ {
1078+ /* Get latest data from MADC -- not done periodically by
1079+ worker as this is more expensive, so only do it when we
1080+ are actually asked for the data... */
1081+ if(di->charge_status == POWER_SUPPLY_STATUS_DISCHARGING)
1082+ val->intval = twl4030battery_voltage_madc();
1083+ else
1084+ val->intval = di->voltage_uV;
1085+
1086+ break;
1087+ }
1088+ case POWER_SUPPLY_PROP_CURRENT_NOW:
1089+ /* FIXME: Get from MADC */
1090+ if(di->charge_status == POWER_SUPPLY_STATUS_DISCHARGING)
1091+ val->intval = 0;
1092+ else
1093+ val->intval = di->current_uA;
1094+ break;
1095+ case POWER_SUPPLY_PROP_TEMP:
1096+ val->intval = di->temp_C;
1097+ break;
1098+ case POWER_SUPPLY_PROP_ONLINE:
1099+ status = twl4030bci_status();
1100+ if ((status & AC_STATEC) == AC_STATEC)
1101+ val->intval = POWER_SUPPLY_TYPE_MAINS;
1102+ else if (usb_charger_flag)
1103+ val->intval = POWER_SUPPLY_TYPE_USB;
1104+ else
1105+ val->intval = 0;
1106+ break;
1107+ case POWER_SUPPLY_PROP_CAPACITY:
1108+ /* Get latest data from MADC -- not done periodically by
1109+ worker as this is more expensive, so only do it when we
1110+ are actually asked for the data... */
1111+ if(di->charge_status == POWER_SUPPLY_STATUS_DISCHARGING)
1112+ di->voltage_uV = twl4030battery_voltage_madc();
1113+
1114+ /*
1115+ * need to get the correct percentage value per the
1116+ * battery characteristics. Approx values for now.
1117+ */
1118+ if (di->voltage_uV < 2894 || LVL_1) {
1119+ val->intval = 5;
1120+ LVL_1 = 0;
1121+ } else if ((di->voltage_uV < 3451 && di->voltage_uV > 2894)
1122+ || LVL_2) {
1123+ val->intval = 20;
1124+ LVL_2 = 0;
1125+ } else if ((di->voltage_uV < 3902 && di->voltage_uV > 3451)
1126+ || LVL_3) {
1127+ val->intval = 50;
1128+ LVL_3 = 0;
1129+ } else if ((di->voltage_uV < 3949 && di->voltage_uV > 3902)
1130+ || LVL_4) {
1131+ val->intval = 75;
1132+ LVL_4 = 0;
1133+ } else if (di->voltage_uV > 3949)
1134+ val->intval = 90;
1135+ break;
1136+ default:
1137+ return -EINVAL;
1138+ }
1139+ return 0;
1140+}
1141+
1142+static char *twl4030_bci_supplied_to[] = {
1143+ "twl4030_bci_battery",
1144+};
1145+
1146+static int __init twl4030_bci_battery_probe(struct platform_device *pdev)
1147+{
1148+ struct twl4030_bci_platform_data *pdata = pdev->dev.platform_data;
1149+ struct twl4030_bci_device_info *di;
1150+ int irq;
1151+ int ret;
1152+
1153+ di = kzalloc(sizeof(*di), GFP_KERNEL);
1154+ if (!di)
1155+ return -ENOMEM;
1156+
1157+ di->dev = &pdev->dev;
1158+ di->bat.name = "twl4030_bci_battery";
1159+ di->bat.supplied_to = twl4030_bci_supplied_to;
1160+ di->bat.num_supplicants = ARRAY_SIZE(twl4030_bci_supplied_to);
1161+ di->bat.type = POWER_SUPPLY_TYPE_BATTERY;
1162+ di->bat.properties = twl4030_bci_battery_props;
1163+ di->bat.num_properties = ARRAY_SIZE(twl4030_bci_battery_props);
1164+ di->bat.get_property = twl4030_bci_battery_get_property;
1165+ di->bat.external_power_changed =
1166+ twl4030_bci_battery_external_power_changed;
1167+
1168+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN;
1169+
1170+ di->bk_bat.name = "twl4030_bci_bk_battery";
1171+ di->bk_bat.type = POWER_SUPPLY_TYPE_BATTERY;
1172+ di->bk_bat.properties = twl4030_bk_bci_battery_props;
1173+ di->bk_bat.num_properties = ARRAY_SIZE(twl4030_bk_bci_battery_props);
1174+ di->bk_bat.get_property = twl4030_bk_bci_battery_get_property;
1175+ di->bk_bat.external_power_changed = NULL;
1176+ di->pdata = pdata;
1177+
1178+ /* Set up clocks */
1179+ twl_i2c_write_u8(TWL4030_MODULE_INTBR, MADC_HFCLK_EN | DEFAULT_MADC_CLK_EN, REG_GPBR1);
1180+
1181+ twl4030charger_ac_en(ENABLE, CHARGE_MODE);
1182+ twl4030charger_usb_en(ENABLE);
1183+ twl4030battery_hw_level_en(ENABLE);
1184+ twl4030battery_hw_presence_en(ENABLE);
1185+
1186+ platform_set_drvdata(pdev, di);
1187+
1188+ /* settings for temperature sensing */
1189+ ret = twl4030battery_temp_setup();
1190+ if (ret)
1191+ goto temp_setup_fail;
1192+
1193+ /* enabling GPCH09 for read back battery voltage */
1194+ if(!di->pdata->no_backup_battery)
1195+ {
1196+ ret = twl4030backupbatt_voltage_setup();
1197+ if (ret)
1198+ goto voltage_setup_fail;
1199+ }
1200+
1201+ /* REVISIT do we need to request both IRQs ?? */
1202+
1203+ /* request BCI interruption */
1204+ irq = platform_get_irq(pdev, 1);
1205+ ret = request_irq(irq, twl4030battery_interrupt,
1206+ 0, pdev->name, NULL);
1207+ if (ret) {
1208+ dev_dbg(&pdev->dev, "could not request irq %d, status %d\n",
1209+ irq, ret);
1210+ goto batt_irq_fail;
1211+ }
1212+
1213+ /* request Power interruption */
1214+ irq = platform_get_irq(pdev, 0);
1215+ ret = request_irq(irq, twl4030charger_interrupt,
1216+ 0, pdev->name, di);
1217+
1218+ if (ret) {
1219+ dev_dbg(&pdev->dev, "could not request irq %d, status %d\n",
1220+ irq, ret);
1221+ goto chg_irq_fail;
1222+ }
1223+
1224+ ret = power_supply_register(&pdev->dev, &di->bat);
1225+ if (ret) {
1226+ dev_dbg(&pdev->dev, "failed to register main battery\n");
1227+ goto batt_failed;
1228+ }
1229+
1230+ INIT_DELAYED_WORK_DEFERRABLE(&di->twl4030_bci_monitor_work,
1231+ twl4030_bci_battery_work);
1232+ schedule_delayed_work(&di->twl4030_bci_monitor_work, 0);
1233+
1234+ if(!pdata->no_backup_battery)
1235+ {
1236+ ret = power_supply_register(&pdev->dev, &di->bk_bat);
1237+ if (ret) {
1238+ dev_dbg(&pdev->dev, "failed to register backup battery\n");
1239+ goto bk_batt_failed;
1240+ }
1241+ }
1242+
1243+ ret = device_create_file(di->bat.dev, &dev_attr_voltage_now_madc);
1244+ ret = device_create_file(di->bat.dev, &dev_attr_charge_current);
1245+ if (ret) {
1246+ dev_err(&pdev->dev, "failed to create sysfs entries\n");
1247+ goto bk_batt_failed;
1248+ }
1249+
1250+ INIT_DELAYED_WORK_DEFERRABLE(&di->twl4030_bk_bci_monitor_work,
1251+ twl4030_bk_bci_battery_work);
1252+ schedule_delayed_work(&di->twl4030_bk_bci_monitor_work, 500);
1253+
1254+ set_charge_current (NULL, NULL, "1023", 4);
1255+ return 0;
1256+
1257+bk_batt_failed:
1258+ if(!pdata->no_backup_battery)
1259+ power_supply_unregister(&di->bat);
1260+batt_failed:
1261+ free_irq(irq, di);
1262+chg_irq_fail:
1263+ irq = platform_get_irq(pdev, 1);
1264+ free_irq(irq, NULL);
1265+batt_irq_fail:
1266+voltage_setup_fail:
1267+temp_setup_fail:
1268+ twl4030charger_ac_en(DISABLE, CHARGE_MODE);
1269+ twl4030charger_usb_en(DISABLE);
1270+ twl4030battery_hw_level_en(DISABLE);
1271+ twl4030battery_hw_presence_en(DISABLE);
1272+ kfree(di);
1273+
1274+ return ret;
1275+}
1276+
1277+static int __exit twl4030_bci_battery_remove(struct platform_device *pdev)
1278+{
1279+ struct twl4030_bci_device_info *di = platform_get_drvdata(pdev);
1280+ int irq;
1281+
1282+ twl4030charger_ac_en(DISABLE, CHARGE_MODE);
1283+ twl4030charger_usb_en(DISABLE);
1284+ twl4030battery_hw_level_en(DISABLE);
1285+ twl4030battery_hw_presence_en(DISABLE);
1286+
1287+ irq = platform_get_irq(pdev, 0);
1288+ free_irq(irq, di);
1289+
1290+ irq = platform_get_irq(pdev, 1);
1291+ free_irq(irq, NULL);
1292+
1293+ flush_scheduled_work();
1294+ power_supply_unregister(&di->bat);
1295+ power_supply_unregister(&di->bk_bat);
1296+ platform_set_drvdata(pdev, NULL);
1297+ kfree(di);
1298+
1299+ return 0;
1300+}
1301+
1302+#ifdef CONFIG_PM
1303+static int twl4030_bci_battery_suspend(struct platform_device *pdev,
1304+ pm_message_t state)
1305+{
1306+ struct twl4030_bci_device_info *di = platform_get_drvdata(pdev);
1307+
1308+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN;
1309+ cancel_delayed_work(&di->twl4030_bci_monitor_work);
1310+ cancel_delayed_work(&di->twl4030_bk_bci_monitor_work);
1311+ return 0;
1312+}
1313+
1314+static int twl4030_bci_battery_resume(struct platform_device *pdev)
1315+{
1316+ struct twl4030_bci_device_info *di = platform_get_drvdata(pdev);
1317+
1318+ schedule_delayed_work(&di->twl4030_bci_monitor_work, 0);
1319+ schedule_delayed_work(&di->twl4030_bk_bci_monitor_work, 50);
1320+ return 0;
1321+}
1322+#else
1323+#define twl4030_bci_battery_suspend NULL
1324+#define twl4030_bci_battery_resume NULL
1325+#endif /* CONFIG_PM */
1326+
1327+static struct platform_driver twl4030_bci_battery_driver = {
1328+ .probe = twl4030_bci_battery_probe,
1329+ .remove = __exit_p(twl4030_bci_battery_remove),
1330+ .suspend = twl4030_bci_battery_suspend,
1331+ .resume = twl4030_bci_battery_resume,
1332+ .driver = {
1333+ .name = "twl4030_bci",
1334+ },
1335+};
1336+
1337+MODULE_LICENSE("GPL");
1338+MODULE_ALIAS("platform:twl4030_bci");
1339+MODULE_AUTHOR("Texas Instruments Inc");
1340+
1341+static int __init twl4030_battery_init(void)
1342+{
1343+ return platform_driver_register(&twl4030_bci_battery_driver);
1344+}
1345+module_init(twl4030_battery_init);
1346+
1347+static void __exit twl4030_battery_exit(void)
1348+{
1349+ platform_driver_unregister(&twl4030_bci_battery_driver);
1350+}
1351+module_exit(twl4030_battery_exit);
1352+
1353diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
1354index d975c5b..a3470ce 100644
1355--- a/include/linux/i2c/twl.h
1356+++ b/include/linux/i2c/twl.h
1357@@ -442,6 +442,7 @@ struct twl4030_clock_init_data {
1358 struct twl4030_bci_platform_data {
1359 int *battery_tmp_tbl;
1360 unsigned int tblsize;
1361+ bool no_backup_battery;
1362 };
1363
1364 /* TWL4030_GPIO_MAX (18) GPIOs, with interrupts */
1365--
13661.6.6.1
1367
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0016-ARM-OMAP-omap3-touchbook-update-boardfile.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0016-ARM-OMAP-omap3-touchbook-update-boardfile.patch
new file mode 100644
index 00000000..0dc58abf
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0016-ARM-OMAP-omap3-touchbook-update-boardfile.patch
@@ -0,0 +1,620 @@
1From 67a87638586acaf7907f94d2f0d3b09190c23880 Mon Sep 17 00:00:00 2001
2From: Gregoire Gentil <gregoire@gentil.com>
3Date: Fri, 12 Mar 2010 11:49:16 +0100
4Subject: [PATCH 16/17] ARM: OMAP: omap3-touchbook: update boardfile
5
6---
7 arch/arm/mach-omap2/board-omap3touchbook.c | 417 +++++++++++++++++++++-------
8 1 files changed, 322 insertions(+), 95 deletions(-)
9
10diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c
11index fc3e03c..c22a3e3 100644
12--- a/arch/arm/mach-omap2/board-omap3touchbook.c
13+++ b/arch/arm/mach-omap2/board-omap3touchbook.c
14@@ -1,7 +1,7 @@
15 /*
16 * linux/arch/arm/mach-omap2/board-omap3touchbook.c
17 *
18- * Copyright (C) 2009 Always Innovating
19+ * Copyright (C) 2009-2010 Always Innovating
20 *
21 * Modified from mach-omap2/board-omap3beagleboard.c
22 *
23@@ -33,6 +33,7 @@
24 #include <linux/spi/spi.h>
25
26 #include <linux/spi/ads7846.h>
27+#include <linux/mma7455l.h>
28
29 #include <linux/regulator/machine.h>
30 #include <linux/i2c/twl.h>
31@@ -45,6 +46,7 @@
32
33 #include <plat/board.h>
34 #include <plat/common.h>
35+#include <plat/display.h>
36 #include <plat/gpmc.h>
37 #include <plat/nand.h>
38 #include <plat/usb.h>
39@@ -60,18 +62,22 @@
40
41 #include <asm/setup.h>
42
43+#include <plat/dmtimer.h>
44+#include <linux/backlight.h>
45
46 #define GPMC_CS0_BASE 0x60
47 #define GPMC_CS_SIZE 0x30
48
49 #define NAND_BLOCK_SIZE SZ_128K
50
51+#define OMAP3_HJ_GPIO 56
52 #define OMAP3_AC_GPIO 136
53+#define OMAP3_TS2_GPIO 154
54 #define OMAP3_TS_GPIO 162
55 #define TB_BL_PWM_TIMER 9
56 #define TB_KILL_POWER_GPIO 168
57
58-unsigned long touchbook_revision;
59+unsigned long ai_revision = 2;
60
61 static struct mtd_partition omap3touchbook_nand_partitions[] = {
62 /* All the partition sizes are listed in terms of NAND block size */
63@@ -126,6 +132,103 @@ static struct platform_device omap3touchbook_nand_device = {
64 .resource = &omap3touchbook_nand_resource,
65 };
66
67+static int touchbook_enable_dvi(struct omap_dss_device *dssdev)
68+{
69+ if (dssdev->reset_gpio != -1)
70+ gpio_set_value(dssdev->reset_gpio, 1);
71+
72+ return 0;
73+}
74+
75+static void touchbook_disable_dvi(struct omap_dss_device *dssdev)
76+{
77+ if (dssdev->reset_gpio != -1)
78+ gpio_set_value(dssdev->reset_gpio, 0);
79+}
80+
81+static struct omap_dss_device touchbook_dvi_device = {
82+ .type = OMAP_DISPLAY_TYPE_DPI,
83+ .name = "dvi",
84+ .driver_name = "generic_panel",
85+ .phy.dpi.data_lines = 24,
86+ .reset_gpio = 176,
87+ .platform_enable = touchbook_enable_dvi,
88+ .platform_disable = touchbook_disable_dvi,
89+};
90+
91+static int touchbook_panel_enable_tv(struct omap_dss_device *dssdev)
92+{
93+#define ENABLE_VDAC_DEDICATED 0x03
94+#define ENABLE_VDAC_DEV_GRP 0x20
95+
96+ twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
97+ ENABLE_VDAC_DEDICATED,
98+ TWL4030_VDAC_DEDICATED);
99+ twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
100+ ENABLE_VDAC_DEV_GRP, TWL4030_VDAC_DEV_GRP);
101+
102+ return 0;
103+}
104+
105+static void touchbook_panel_disable_tv(struct omap_dss_device *dssdev)
106+{
107+ twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x00,
108+ TWL4030_VDAC_DEDICATED);
109+ twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x00,
110+ TWL4030_VDAC_DEV_GRP);
111+}
112+
113+static struct omap_dss_device touchbook_tv_device = {
114+ .name = "tv",
115+ .driver_name = "venc",
116+ .type = OMAP_DISPLAY_TYPE_VENC,
117+ .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
118+ .platform_enable = touchbook_panel_enable_tv,
119+ .platform_disable = touchbook_panel_disable_tv,
120+};
121+
122+static struct omap_dss_device *touchbook_dss_devices[] = {
123+ &touchbook_dvi_device,
124+ &touchbook_tv_device,
125+};
126+
127+static struct omap_dss_board_info touchbook_dss_data = {
128+ .num_devices = ARRAY_SIZE(touchbook_dss_devices),
129+ .devices = touchbook_dss_devices,
130+ .default_device = &touchbook_dvi_device,
131+};
132+
133+static struct platform_device touchbook_dss_device = {
134+ .name = "omapdss",
135+ .id = -1,
136+ .dev = {
137+ .platform_data = &touchbook_dss_data,
138+ },
139+};
140+
141+static struct regulator_consumer_supply touchbook_vdac_supply = {
142+ .supply = "vdda_dac",
143+ .dev = &touchbook_dss_device.dev,
144+};
145+
146+static struct regulator_consumer_supply touchbook_vdvi_supply = {
147+ .supply = "vdds_dsi",
148+ .dev = &touchbook_dss_device.dev,
149+};
150+
151+static void __init touchbook_display_init(void)
152+{
153+ int r;
154+
155+ r = gpio_request(touchbook_dvi_device.reset_gpio, "DVI reset");
156+ if (r < 0) {
157+ printk(KERN_ERR "Unable to get DVI reset GPIO\n");
158+ return;
159+ }
160+
161+ gpio_direction_output(touchbook_dvi_device.reset_gpio, 0);
162+}
163+
164 #include "sdram-micron-mt46h32m32lf-6.h"
165
166 static struct twl4030_hsmmc_info mmc[] = {
167@@ -137,15 +240,6 @@ static struct twl4030_hsmmc_info mmc[] = {
168 {} /* Terminator */
169 };
170
171-static struct platform_device omap3_touchbook_lcd_device = {
172- .name = "omap3touchbook_lcd",
173- .id = -1,
174-};
175-
176-static struct omap_lcd_config omap3_touchbook_lcd_config __initdata = {
177- .ctrl_name = "internal",
178-};
179-
180 static struct regulator_consumer_supply touchbook_vmmc1_supply = {
181 .supply = "vmmc",
182 };
183@@ -177,6 +271,7 @@ static int touchbook_twl_gpio_setup(struct device *dev,
184 * power switch and overcurrent detect
185 */
186
187+#if 0
188 gpio_request(gpio + 1, "EHCI_nOC");
189 gpio_direction_input(gpio + 1);
190
191@@ -187,6 +282,7 @@ static int touchbook_twl_gpio_setup(struct device *dev,
192 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
193 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
194
195+#endif
196 return 0;
197 }
198
199@@ -201,16 +297,6 @@ static struct twl4030_gpio_platform_data touchbook_gpio_data = {
200 .setup = touchbook_twl_gpio_setup,
201 };
202
203-static struct regulator_consumer_supply touchbook_vdac_supply = {
204- .supply = "vdac",
205- .dev = &omap3_touchbook_lcd_device.dev,
206-};
207-
208-static struct regulator_consumer_supply touchbook_vdvi_supply = {
209- .supply = "vdvi",
210- .dev = &omap3_touchbook_lcd_device.dev,
211-};
212-
213 /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
214 static struct regulator_init_data touchbook_vmmc1 = {
215 .constraints = {
216@@ -283,6 +369,15 @@ static struct twl4030_codec_data touchbook_codec_data = {
217 .audio = &touchbook_audio_data,
218 };
219
220+static struct twl4030_bci_platform_data touchbook_bci_data = {
221+ .tblsize = 0,
222+ .no_backup_battery = 1,
223+};
224+
225+static struct twl4030_madc_platform_data touchbook_madc_data = {
226+ .irq_line = 1,
227+};
228+
229 static struct twl4030_platform_data touchbook_twldata = {
230 .irq_base = TWL4030_IRQ_BASE,
231 .irq_end = TWL4030_IRQ_END,
232@@ -291,10 +386,15 @@ static struct twl4030_platform_data touchbook_twldata = {
233 .usb = &touchbook_usb_data,
234 .gpio = &touchbook_gpio_data,
235 .codec = &touchbook_codec_data,
236+ .madc = &touchbook_madc_data,
237 .vmmc1 = &touchbook_vmmc1,
238 .vsim = &touchbook_vsim,
239 .vdac = &touchbook_vdac,
240 .vpll2 = &touchbook_vpll2,
241+
242+ /* TouchBook BCI */
243+ .bci = &touchbook_bci_data,
244+ .madc = &touchbook_madc_data,
245 };
246
247 static struct i2c_board_info __initdata touchbook_i2c_boardinfo[] = {
248@@ -310,10 +410,18 @@ static struct i2c_board_info __initdata touchBook_i2c_boardinfo[] = {
249 {
250 I2C_BOARD_INFO("bq27200", 0x55),
251 },
252+ {
253+ I2C_BOARD_INFO("chacha", 0x40),
254+ .irq = OMAP_GPIO_IRQ(OMAP3_TS2_GPIO),
255+ },
256+ {
257+ I2C_BOARD_INFO("ds1307", 0x68),
258+ },
259 };
260
261 static int __init omap3_touchbook_i2c_init(void)
262 {
263+ int ret;
264 /* Standard TouchBook bus */
265 omap_register_i2c_bus(1, 2600, touchbook_i2c_boardinfo,
266 ARRAY_SIZE(touchbook_i2c_boardinfo));
267@@ -322,53 +430,16 @@ static int __init omap3_touchbook_i2c_init(void)
268 omap_register_i2c_bus(3, 100, touchBook_i2c_boardinfo,
269 ARRAY_SIZE(touchBook_i2c_boardinfo));
270
271- return 0;
272-}
273-
274-static void __init omap3_ads7846_init(void)
275-{
276- if (gpio_request(OMAP3_TS_GPIO, "ads7846_pen_down")) {
277- printk(KERN_ERR "Failed to request GPIO %d for "
278- "ads7846 pen down IRQ\n", OMAP3_TS_GPIO);
279- return;
280+ ret = gpio_request(OMAP3_TS2_GPIO, "chacha");
281+ if (ret < 0) {
282+ printk(KERN_ERR "Failed to request GPIO %d for chacha IRQ\n", OMAP3_TS2_GPIO);
283+ return 0;
284 }
285+ gpio_direction_input(OMAP3_TS2_GPIO);
286
287- gpio_direction_input(OMAP3_TS_GPIO);
288- omap_set_gpio_debounce(OMAP3_TS_GPIO, 1);
289- omap_set_gpio_debounce_time(OMAP3_TS_GPIO, 0xa);
290+ return 0;
291 }
292
293-static struct ads7846_platform_data ads7846_config = {
294- .x_min = 100,
295- .y_min = 265,
296- .x_max = 3950,
297- .y_max = 3750,
298- .x_plate_ohms = 40,
299- .pressure_max = 255,
300- .debounce_max = 10,
301- .debounce_tol = 5,
302- .debounce_rep = 1,
303- .gpio_pendown = OMAP3_TS_GPIO,
304- .keep_vref_on = 1,
305-};
306-
307-static struct omap2_mcspi_device_config ads7846_mcspi_config = {
308- .turbo_mode = 0,
309- .single_channel = 1, /* 0: slave, 1: master */
310-};
311-
312-static struct spi_board_info omap3_ads7846_spi_board_info[] __initdata = {
313- {
314- .modalias = "ads7846",
315- .bus_num = 4,
316- .chip_select = 0,
317- .max_speed_hz = 1500000,
318- .controller_data = &ads7846_mcspi_config,
319- .irq = OMAP_GPIO_IRQ(OMAP3_TS_GPIO),
320- .platform_data = &ads7846_config,
321- }
322-};
323-
324 static struct gpio_led gpio_leds[] = {
325 {
326 .name = "touchbook::usr0",
327@@ -412,6 +483,7 @@ static struct gpio_keys_button gpio_buttons[] = {
328 .gpio = 183,
329 .desc = "power",
330 .wakeup = 1,
331+ .active_low = 1,
332 },
333 };
334
335@@ -428,23 +500,8 @@ static struct platform_device keys_gpio = {
336 },
337 };
338
339-static struct omap_board_config_kernel omap3_touchbook_config[] __initdata = {
340- { OMAP_TAG_LCD, &omap3_touchbook_lcd_config },
341-};
342-
343-#ifdef CONFIG_OMAP_MUX
344-static struct omap_board_mux board_mux[] __initdata = {
345- { .reg_offset = OMAP_MUX_TERMINATOR },
346-};
347-#else
348-#define board_mux NULL
349-#endif
350-
351 static void __init omap3_touchbook_init_irq(void)
352 {
353- omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
354- omap_board_config = omap3_touchbook_config;
355- omap_board_config_size = ARRAY_SIZE(omap3_touchbook_config);
356 omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
357 mt46h32m32lf6_sdrc_params, omap35x_mpu_rate_table,
358 omap35x_dsp_rate_table, omap35x_l3_rate_table);
359@@ -456,9 +513,9 @@ static void __init omap3_touchbook_init_irq(void)
360 }
361
362 static struct platform_device *omap3_touchbook_devices[] __initdata = {
363- &omap3_touchbook_lcd_device,
364 &leds_gpio,
365 &keys_gpio,
366+ &touchbook_dss_device,
367 };
368
369 static void __init omap3touchbook_flash_init(void)
370@@ -500,7 +557,7 @@ static void __init omap3touchbook_flash_init(void)
371 }
372 }
373
374-static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
375+static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = {
376
377 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
378 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
379@@ -512,6 +569,170 @@ static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
380 .reset_gpio_port[2] = -EINVAL
381 };
382
383+#ifdef CONFIG_OMAP_MUX
384+static struct omap_board_mux board_mux[] __initdata = {
385+ { .reg_offset = OMAP_MUX_TERMINATOR },
386+};
387+#else
388+#define board_mux NULL
389+#endif
390+
391+static struct ads7846_platform_data ads7846_config = {
392+ .x_min = 100,
393+ .y_min = 265,
394+ .x_max = 3950,
395+ .y_max = 3750,
396+ .x_plate_ohms = 40,
397+ .pressure_max = 255,
398+ .debounce_max = 10,
399+ .debounce_tol = 5,
400+ .debounce_rep = 1,
401+ .gpio_pendown = OMAP3_TS_GPIO,
402+ .keep_vref_on = 1,
403+};
404+
405+static struct omap2_mcspi_device_config ads7846_mcspi_config = {
406+ .turbo_mode = 0,
407+ .single_channel = 1, /* 0: slave, 1: master */
408+};
409+
410+static struct spi_board_info omap3_ads7846_spi_board_info[] __initdata = {
411+ {
412+ .modalias = "ads7846",
413+ .bus_num = 4,
414+ .chip_select = 0,
415+ .max_speed_hz = 1500000,
416+ .controller_data = &ads7846_mcspi_config,
417+ .irq = OMAP_GPIO_IRQ(OMAP3_TS_GPIO),
418+ .platform_data = &ads7846_config,
419+ }
420+};
421+
422+static void __init omap3_ads7846_init(void)
423+{
424+ if (gpio_request(OMAP3_TS_GPIO, "ads7846_pen_down")) {
425+ printk(KERN_ERR "Failed to request GPIO %d for "
426+ "ads7846 pen down IRQ\n", OMAP3_TS_GPIO);
427+ return;
428+ }
429+
430+ gpio_direction_input(OMAP3_TS_GPIO);
431+ omap_set_gpio_debounce(OMAP3_TS_GPIO, 1);
432+ omap_set_gpio_debounce_time(OMAP3_TS_GPIO, 0xa);
433+}
434+
435+static struct mma7455l_platform_data mma7455l_config = {
436+ .calibration_x = -4,
437+ .calibration_y = 28,
438+ .calibration_z = -28,
439+};
440+
441+static struct omap2_mcspi_device_config mma7455l_mcspi_config = {
442+ .turbo_mode = 0,
443+ .single_channel = 1, /* 0: slave, 1: master */
444+};
445+
446+static struct spi_board_info omap3_mma7455l_spi_board_info[] __initdata = {
447+ {
448+ .modalias = "mma7455l",
449+ .bus_num = 3,
450+ .chip_select = 0,
451+ .max_speed_hz = 200000,
452+ .irq = OMAP_GPIO_IRQ(OMAP3_AC_GPIO),
453+ .controller_data = &mma7455l_mcspi_config, //(void *) 135,
454+ .platform_data = &mma7455l_config,
455+ }
456+};
457+
458+static void __init omap3_mma7455l_init(void)
459+{
460+ int ret;
461+
462+ ret = gpio_request(OMAP3_AC_GPIO, "mma7455l");
463+ if (ret < 0) {
464+ printk(KERN_ERR "Failed to request GPIO %d for mma7455l IRQ\n", OMAP3_AC_GPIO);
465+ return;
466+ }
467+
468+ gpio_direction_input(OMAP3_AC_GPIO);
469+}
470+
471+static int touchbook_backlight_brightness = 50;
472+static struct omap_dm_timer *touchbook_backlight_pwm;
473+
474+static int touchbook_backlight_read(struct backlight_device *bd)
475+{
476+ return touchbook_backlight_brightness;
477+}
478+
479+static int touchbook_backlight_update(struct backlight_device *bd)
480+{
481+ int value = bd->props.brightness;
482+ touchbook_backlight_brightness = value;
483+
484+ /* Frequency calculation:
485+ - For 200Hz PWM, you want to load -164 (=> -32768Hz / 200Hz).
486+ - Minimum duty cycle for the backlight is 15%.
487+ - You have (164*0.85) => ~140 levels of brightness.
488+ */
489+
490+ /* Halve input brightness */
491+ if (!bd->props.boost)
492+ value /= 2;
493+
494+ /* For maximum brightness, just stop the timer... */
495+ if(value != bd->props.max_brightness)
496+ {
497+ /* Load the appropriate value for 200Hz PWM */
498+ u32 period = clk_get_rate(omap_dm_timer_get_fclk(touchbook_backlight_pwm)) / bd->props.pwm_fq;
499+
500+ /* Minimum duty cycle is 15% */
501+ u32 minimum = (period * bd->props.min_duty) / 100;
502+ u32 maximum = (period * 17) / 20;
503+
504+ /* Work out match value */
505+ u32 match = (maximum * value) / 100;
506+
507+ /* Start... */
508+ omap_dm_timer_set_load(touchbook_backlight_pwm, 1, 0xFFFFFFFF - period - 1);
509+ omap_dm_timer_set_match(touchbook_backlight_pwm, 1, 0xFFFFFFFF - minimum - match);
510+ omap_dm_timer_write_counter(touchbook_backlight_pwm, -1);
511+ omap_dm_timer_start(touchbook_backlight_pwm);
512+ }
513+ else
514+ omap_dm_timer_stop(touchbook_backlight_pwm);
515+
516+
517+ return 0;
518+}
519+
520+static struct backlight_ops touchbook_backlight_properties = {
521+ .get_brightness = touchbook_backlight_read,
522+ .update_status = touchbook_backlight_update,
523+};
524+
525+static void __init omap3_touchbook_backlight_init(void)
526+{
527+ static struct backlight_device *bd;
528+ bd = backlight_device_register("touchbook", NULL, NULL, &touchbook_backlight_properties);
529+
530+ if(bd)
531+ {
532+ touchbook_backlight_pwm = omap_dm_timer_request_specific(TB_BL_PWM_TIMER);
533+ omap_dm_timer_enable(touchbook_backlight_pwm);
534+ omap_dm_timer_set_source(touchbook_backlight_pwm, OMAP_TIMER_SRC_SYS_CLK);
535+ omap_dm_timer_set_pwm(touchbook_backlight_pwm, 1, 1, OMAP_TIMER_TRIGGER_OVERFLOW_AND_COMPARE);
536+
537+ bd->props.max_brightness = 100;
538+ bd->props.brightness = touchbook_backlight_brightness;
539+ bd->props.boost = 0;
540+ bd->props.min_duty = 15;
541+ bd->props.pwm_fq = 200;
542+ }
543+
544+ touchbook_backlight_update(bd);
545+}
546+
547 static void omap3_touchbook_poweroff(void)
548 {
549 int r;
550@@ -525,33 +746,26 @@ static void omap3_touchbook_poweroff(void)
551 gpio_direction_output(TB_KILL_POWER_GPIO, 0);
552 }
553
554-static void __init early_touchbook_revision(char **p)
555+static int __init ai_revision_instance(char *str)
556 {
557- if (!*p)
558- return;
559+ if (!str)
560+ return -EINVAL;
561+
562+ ai_revision = simple_strtoul(str, NULL, 10);
563
564- strict_strtoul(*p, 10, &touchbook_revision);
565+ return 0;
566 }
567-__early_param("tbr=", early_touchbook_revision);
568
569 static void __init omap3_touchbook_init(void)
570 {
571 pm_power_off = omap3_touchbook_poweroff;
572
573+ omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
574 omap3_touchbook_i2c_init();
575 platform_add_devices(omap3_touchbook_devices,
576 ARRAY_SIZE(omap3_touchbook_devices));
577 omap_serial_init();
578
579- omap_mux_init_gpio(170, OMAP_PIN_INPUT);
580- gpio_request(176, "DVI_nPD");
581- /* REVISIT leave DVI powered down until it's needed ... */
582- gpio_direction_output(176, true);
583-
584- /* Touchscreen and accelerometer */
585- spi_register_board_info(omap3_ads7846_spi_board_info,
586- ARRAY_SIZE(omap3_ads7846_spi_board_info));
587- omap3_ads7846_init();
588 usb_musb_init();
589 usb_ehci_init(&ehci_pdata);
590 omap3touchbook_flash_init();
591@@ -559,6 +773,17 @@ static void __init omap3_touchbook_init(void)
592 /* Ensure SDRC pins are mux'd for self-refresh */
593 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
594 omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
595+
596+ touchbook_display_init();
597+ omap3_touchbook_backlight_init();
598+
599+ /* Touchscreen and accelerometer */
600+ spi_register_board_info(omap3_ads7846_spi_board_info,
601+ ARRAY_SIZE(omap3_ads7846_spi_board_info));
602+ spi_register_board_info(omap3_mma7455l_spi_board_info,
603+ ARRAY_SIZE(omap3_mma7455l_spi_board_info));
604+ omap3_ads7846_init();
605+ omap3_mma7455l_init();
606 }
607
608 static void __init omap3_touchbook_map_io(void)
609@@ -567,6 +792,8 @@ static void __init omap3_touchbook_map_io(void)
610 omap2_map_common_io();
611 }
612
613+early_param("air", ai_revision_instance);
614+
615 MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board")
616 /* Maintainer: Gregoire Gentil - http://www.alwaysinnovating.com */
617 .phys_io = 0x48000000,
618--
6191.6.6.1
620
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0017-ARM-OMAP-add-800MHz-OPP-and-remove-125MHz-one.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0017-ARM-OMAP-add-800MHz-OPP-and-remove-125MHz-one.patch
new file mode 100644
index 00000000..8a06ead4
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/0017-ARM-OMAP-add-800MHz-OPP-and-remove-125MHz-one.patch
@@ -0,0 +1,48 @@
1From 1f36c057ab83a5c5e8162094fb52022edd5ba9b8 Mon Sep 17 00:00:00 2001
2From: Koen Kooi <koen@dominion.thruhere.net>
3Date: Tue, 4 May 2010 09:01:21 +0200
4Subject: [PATCH 17/17] ARM: OMAP: add 800MHz OPP and remove 125MHz one
5
6---
7 arch/arm/mach-omap2/pm34xx.c | 6 ++++--
8 1 files changed, 4 insertions(+), 2 deletions(-)
9
10diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
11index d1cc528..42fbcdd 100644
12--- a/arch/arm/mach-omap2/pm34xx.c
13+++ b/arch/arm/mach-omap2/pm34xx.c
14@@ -120,7 +120,7 @@ static struct prm_setup_vc prm_setup = {
15 struct omap_opp omap35x_mpu_rate_table[] = {
16 {0, 0, 0},
17 /*OPP1*/
18- {S125M, VDD1_OPP1, 0x1E},
19+// {S125M, VDD1_OPP1, 0x1E},
20 /*OPP2*/
21 {S250M, VDD1_OPP2, 0x26},
22 /*OPP3*/
23@@ -131,12 +131,13 @@ struct omap_opp omap35x_mpu_rate_table[] = {
24 {S600M, VDD1_OPP5, 0x3C},
25 /*OPP6*/
26 {S720M, VDD1_OPP6, 0x3C},
27+ {S800M, VDD1_OPP6, 0x3F},
28 };
29
30 struct omap_opp omap35x_dsp_rate_table[] = {
31 {0, 0, 0},
32 /*OPP1*/
33- {S90M, VDD1_OPP1, 0x1E},
34+// {S90M, VDD1_OPP1, 0x1E},
35 /*OPP2*/
36 {S180M, VDD1_OPP2, 0x26},
37 /*OPP3*/
38@@ -147,6 +148,7 @@ struct omap_opp omap35x_dsp_rate_table[] = {
39 {S430M, VDD1_OPP5, 0x3C},
40 /*OPP5*/
41 {S520M, VDD1_OPP6, 0x3C},
42+ {S600M, VDD1_OPP6, 0x3F},
43 };
44
45 struct omap_opp omap35x_l3_rate_table[] = {
46--
471.6.6.1
48
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/defconfig b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/defconfig
new file mode 100644
index 00000000..6f2b7bd9
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/omap3-touchbook/defconfig
@@ -0,0 +1,3043 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.32
4# Mon May 10 12:50:28 2010
5#
6CONFIG_ARM=y
7CONFIG_SYS_SUPPORTS_APM_EMULATION=y
8CONFIG_GENERIC_GPIO=y
9CONFIG_GENERIC_TIME=y
10CONFIG_GENERIC_CLOCKEVENTS=y
11CONFIG_GENERIC_HARDIRQS=y
12CONFIG_STACKTRACE_SUPPORT=y
13CONFIG_HAVE_LATENCYTOP_SUPPORT=y
14CONFIG_LOCKDEP_SUPPORT=y
15CONFIG_TRACE_IRQFLAGS_SUPPORT=y
16CONFIG_HARDIRQS_SW_RESEND=y
17CONFIG_GENERIC_IRQ_PROBE=y
18CONFIG_RWSEM_GENERIC_SPINLOCK=y
19CONFIG_ARCH_HAS_CPUFREQ=y
20CONFIG_GENERIC_HWEIGHT=y
21CONFIG_GENERIC_CALIBRATE_DELAY=y
22CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
23CONFIG_OPROFILE_ARMV7=y
24CONFIG_VECTORS_BASE=0xffff0000
25CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
26CONFIG_CONSTRUCTORS=y
27
28#
29# General setup
30#
31CONFIG_EXPERIMENTAL=y
32CONFIG_BROKEN_ON_SMP=y
33CONFIG_LOCK_KERNEL=y
34CONFIG_INIT_ENV_ARG_LIMIT=32
35CONFIG_LOCALVERSION=""
36# CONFIG_LOCALVERSION_AUTO is not set
37CONFIG_SWAP=y
38CONFIG_SYSVIPC=y
39CONFIG_SYSVIPC_SYSCTL=y
40# CONFIG_POSIX_MQUEUE is not set
41CONFIG_BSD_PROCESS_ACCT=y
42# CONFIG_BSD_PROCESS_ACCT_V3 is not set
43CONFIG_TASKSTATS=y
44CONFIG_TASK_DELAY_ACCT=y
45CONFIG_TASK_XACCT=y
46CONFIG_TASK_IO_ACCOUNTING=y
47# CONFIG_AUDIT is not set
48
49#
50# RCU Subsystem
51#
52CONFIG_TREE_RCU=y
53# CONFIG_TREE_PREEMPT_RCU is not set
54# CONFIG_TINY_RCU is not set
55# CONFIG_RCU_TRACE is not set
56CONFIG_RCU_FANOUT=32
57# CONFIG_RCU_FANOUT_EXACT is not set
58# CONFIG_TREE_RCU_TRACE is not set
59CONFIG_IKCONFIG=y
60CONFIG_IKCONFIG_PROC=y
61CONFIG_LOG_BUF_SHIFT=15
62CONFIG_GROUP_SCHED=y
63CONFIG_FAIR_GROUP_SCHED=y
64# CONFIG_RT_GROUP_SCHED is not set
65CONFIG_USER_SCHED=y
66# CONFIG_CGROUP_SCHED is not set
67# CONFIG_CGROUPS is not set
68# CONFIG_SYSFS_DEPRECATED_V2 is not set
69# CONFIG_RELAY is not set
70# CONFIG_NAMESPACES is not set
71CONFIG_BLK_DEV_INITRD=y
72CONFIG_INITRAMFS_SOURCE=""
73CONFIG_RD_GZIP=y
74CONFIG_RD_BZIP2=y
75CONFIG_RD_LZMA=y
76CONFIG_CC_OPTIMIZE_FOR_SIZE=y
77CONFIG_SYSCTL=y
78CONFIG_ANON_INODES=y
79CONFIG_EMBEDDED=y
80CONFIG_UID16=y
81# CONFIG_SYSCTL_SYSCALL is not set
82CONFIG_KALLSYMS=y
83# CONFIG_KALLSYMS_ALL is not set
84# CONFIG_KALLSYMS_EXTRA_PASS is not set
85CONFIG_HOTPLUG=y
86CONFIG_PRINTK=y
87CONFIG_BUG=y
88# CONFIG_ELF_CORE is not set
89CONFIG_BASE_FULL=y
90CONFIG_FUTEX=y
91CONFIG_EPOLL=y
92CONFIG_SIGNALFD=y
93CONFIG_TIMERFD=y
94CONFIG_EVENTFD=y
95CONFIG_SHMEM=y
96CONFIG_AIO=y
97
98#
99# Kernel Performance Events And Counters
100#
101CONFIG_VM_EVENT_COUNTERS=y
102# CONFIG_COMPAT_BRK is not set
103CONFIG_SLAB=y
104# CONFIG_SLUB is not set
105# CONFIG_SLOB is not set
106CONFIG_PROFILING=y
107CONFIG_TRACEPOINTS=y
108CONFIG_OPROFILE=m
109CONFIG_HAVE_OPROFILE=y
110# CONFIG_KPROBES is not set
111CONFIG_HAVE_KPROBES=y
112CONFIG_HAVE_KRETPROBES=y
113CONFIG_HAVE_CLK=y
114
115#
116# GCOV-based kernel profiling
117#
118# CONFIG_GCOV_KERNEL is not set
119CONFIG_SLOW_WORK=y
120# CONFIG_SLOW_WORK_DEBUG is not set
121CONFIG_HAVE_GENERIC_DMA_COHERENT=y
122CONFIG_SLABINFO=y
123CONFIG_RT_MUTEXES=y
124CONFIG_BASE_SMALL=0
125CONFIG_MODULES=y
126CONFIG_MODULE_FORCE_LOAD=y
127CONFIG_MODULE_UNLOAD=y
128CONFIG_MODULE_FORCE_UNLOAD=y
129CONFIG_MODVERSIONS=y
130CONFIG_MODULE_SRCVERSION_ALL=y
131CONFIG_BLOCK=y
132CONFIG_LBDAF=y
133CONFIG_BLK_DEV_BSG=y
134CONFIG_BLK_DEV_INTEGRITY=y
135
136#
137# IO Schedulers
138#
139CONFIG_IOSCHED_NOOP=y
140CONFIG_IOSCHED_DEADLINE=y
141CONFIG_IOSCHED_CFQ=y
142# CONFIG_DEFAULT_DEADLINE is not set
143CONFIG_DEFAULT_CFQ=y
144# CONFIG_DEFAULT_NOOP is not set
145CONFIG_DEFAULT_IOSCHED="cfq"
146# CONFIG_INLINE_SPIN_TRYLOCK is not set
147# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
148# CONFIG_INLINE_SPIN_LOCK is not set
149# CONFIG_INLINE_SPIN_LOCK_BH is not set
150# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
151# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
152# CONFIG_INLINE_SPIN_UNLOCK is not set
153# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
154# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
155# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
156# CONFIG_INLINE_READ_TRYLOCK is not set
157# CONFIG_INLINE_READ_LOCK is not set
158# CONFIG_INLINE_READ_LOCK_BH is not set
159# CONFIG_INLINE_READ_LOCK_IRQ is not set
160# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
161# CONFIG_INLINE_READ_UNLOCK is not set
162# CONFIG_INLINE_READ_UNLOCK_BH is not set
163# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
164# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
165# CONFIG_INLINE_WRITE_TRYLOCK is not set
166# CONFIG_INLINE_WRITE_LOCK is not set
167# CONFIG_INLINE_WRITE_LOCK_BH is not set
168# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
169# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
170# CONFIG_INLINE_WRITE_UNLOCK is not set
171# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
172# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
173# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
174# CONFIG_MUTEX_SPIN_ON_OWNER is not set
175CONFIG_FREEZER=y
176
177#
178# System Type
179#
180CONFIG_MMU=y
181# CONFIG_ARCH_AAEC2000 is not set
182# CONFIG_ARCH_INTEGRATOR is not set
183# CONFIG_ARCH_REALVIEW is not set
184# CONFIG_ARCH_VERSATILE is not set
185# CONFIG_ARCH_AT91 is not set
186# CONFIG_ARCH_CLPS711X is not set
187# CONFIG_ARCH_GEMINI is not set
188# CONFIG_ARCH_EBSA110 is not set
189# CONFIG_ARCH_EP93XX is not set
190# CONFIG_ARCH_FOOTBRIDGE is not set
191# CONFIG_ARCH_MXC is not set
192# CONFIG_ARCH_STMP3XXX is not set
193# CONFIG_ARCH_NETX is not set
194# CONFIG_ARCH_H720X is not set
195# CONFIG_ARCH_NOMADIK is not set
196# CONFIG_ARCH_IOP13XX is not set
197# CONFIG_ARCH_IOP32X is not set
198# CONFIG_ARCH_IOP33X is not set
199# CONFIG_ARCH_IXP23XX is not set
200# CONFIG_ARCH_IXP2000 is not set
201# CONFIG_ARCH_IXP4XX is not set
202# CONFIG_ARCH_L7200 is not set
203# CONFIG_ARCH_DOVE is not set
204# CONFIG_ARCH_KIRKWOOD is not set
205# CONFIG_ARCH_LOKI is not set
206# CONFIG_ARCH_MV78XX0 is not set
207# CONFIG_ARCH_ORION5X is not set
208# CONFIG_ARCH_MMP is not set
209# CONFIG_ARCH_KS8695 is not set
210# CONFIG_ARCH_NS9XXX is not set
211# CONFIG_ARCH_W90X900 is not set
212# CONFIG_ARCH_PNX4008 is not set
213# CONFIG_ARCH_PXA is not set
214# CONFIG_ARCH_MSM is not set
215# CONFIG_ARCH_RPC is not set
216# CONFIG_ARCH_SA1100 is not set
217# CONFIG_ARCH_S3C2410 is not set
218# CONFIG_ARCH_S3C64XX is not set
219# CONFIG_ARCH_S5PC1XX is not set
220# CONFIG_ARCH_SHARK is not set
221# CONFIG_ARCH_LH7A40X is not set
222# CONFIG_ARCH_U300 is not set
223# CONFIG_ARCH_DAVINCI is not set
224CONFIG_ARCH_OMAP=y
225# CONFIG_ARCH_BCMRING is not set
226# CONFIG_ARCH_U8500 is not set
227
228#
229# TI OMAP Implementations
230#
231CONFIG_ARCH_OMAP_OTG=y
232# CONFIG_ARCH_OMAP1 is not set
233# CONFIG_ARCH_OMAP2 is not set
234CONFIG_ARCH_OMAP3=y
235# CONFIG_ARCH_OMAP4 is not set
236
237#
238# OMAP Feature Selections
239#
240CONFIG_OMAP_SMARTREFLEX=y
241# CONFIG_OMAP_SMARTREFLEX_TESTING is not set
242CONFIG_OMAP_RESET_CLOCKS=y
243# CONFIG_OMAP_MUX is not set
244CONFIG_OMAP_MCBSP=y
245CONFIG_OMAP_MBOX_FWK=m
246# CONFIG_OMAP_MPU_TIMER is not set
247CONFIG_OMAP_32K_TIMER=y
248# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set
249# CONFIG_OMAP3_DEBOBS is not set
250CONFIG_OMAP_32K_TIMER_HZ=128
251CONFIG_OMAP_DM_TIMER=y
252# CONFIG_OMAP_LL_DEBUG_UART1 is not set
253# CONFIG_OMAP_LL_DEBUG_UART2 is not set
254CONFIG_OMAP_LL_DEBUG_UART3=y
255# CONFIG_OMAP_LL_DEBUG_NONE is not set
256# CONFIG_OMAP_PM_NONE is not set
257# CONFIG_OMAP_PM_NOOP is not set
258CONFIG_OMAP_PM_SRF=y
259CONFIG_ARCH_OMAP34XX=y
260CONFIG_ARCH_OMAP3430=y
261
262#
263# OMAP Board Type
264#
265# CONFIG_MACH_OMAP3_BEAGLE is not set
266# CONFIG_MACH_OMAP_LDP is not set
267# CONFIG_MACH_OVERO is not set
268# CONFIG_MACH_OMAP3EVM is not set
269# CONFIG_MACH_OMAP3517EVM is not set
270# CONFIG_MACH_OMAP3_PANDORA is not set
271CONFIG_MACH_OMAP3_TOUCHBOOK=y
272# CONFIG_MACH_OMAP_3430SDP is not set
273# CONFIG_MACH_NOKIA_RX51 is not set
274# CONFIG_MACH_OMAP_ZOOM2 is not set
275# CONFIG_MACH_OMAP_ZOOM3 is not set
276# CONFIG_MACH_CM_T35 is not set
277# CONFIG_MACH_IGEP0020 is not set
278# CONFIG_MACH_OMAP_3630SDP is not set
279# CONFIG_OMAP3_EMU is not set
280# CONFIG_OMAP3_SDRC_AC_TIMING is not set
281
282#
283# Processor Type
284#
285CONFIG_CPU_32=y
286CONFIG_CPU_32v6K=y
287CONFIG_CPU_V7=y
288CONFIG_CPU_32v7=y
289CONFIG_CPU_ABRT_EV7=y
290CONFIG_CPU_PABRT_V7=y
291CONFIG_CPU_CACHE_V7=y
292CONFIG_CPU_CACHE_VIPT=y
293CONFIG_CPU_COPY_V6=y
294CONFIG_CPU_TLB_V7=y
295CONFIG_CPU_HAS_ASID=y
296CONFIG_CPU_CP15=y
297CONFIG_CPU_CP15_MMU=y
298
299#
300# Processor Features
301#
302CONFIG_ARM_THUMB=y
303CONFIG_ARM_THUMBEE=y
304# CONFIG_CPU_ICACHE_DISABLE is not set
305# CONFIG_CPU_DCACHE_DISABLE is not set
306# CONFIG_CPU_BPREDICT_DISABLE is not set
307CONFIG_HAS_TLS_REG=y
308CONFIG_ARM_L1_CACHE_SHIFT=6
309# CONFIG_USER_L2_PLE is not set
310# CONFIG_USER_PMON is not set
311CONFIG_ARM_ERRATA_430973=y
312# CONFIG_ARM_ERRATA_458693 is not set
313# CONFIG_ARM_ERRATA_460075 is not set
314CONFIG_COMMON_CLKDEV=y
315
316#
317# Bus support
318#
319# CONFIG_PCI_SYSCALL is not set
320# CONFIG_ARCH_SUPPORTS_MSI is not set
321# CONFIG_PCCARD is not set
322
323#
324# Kernel Features
325#
326CONFIG_TICK_ONESHOT=y
327CONFIG_NO_HZ=y
328CONFIG_HIGH_RES_TIMERS=y
329CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
330# CONFIG_VMSPLIT_3G is not set
331CONFIG_VMSPLIT_2G=y
332# CONFIG_VMSPLIT_1G is not set
333CONFIG_PAGE_OFFSET=0x80000000
334# CONFIG_PREEMPT_NONE is not set
335# CONFIG_PREEMPT_VOLUNTARY is not set
336CONFIG_PREEMPT=y
337CONFIG_HZ=128
338# CONFIG_THUMB2_KERNEL is not set
339CONFIG_AEABI=y
340# CONFIG_OABI_COMPAT is not set
341CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
342# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
343# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
344# CONFIG_HIGHMEM is not set
345CONFIG_SELECT_MEMORY_MODEL=y
346CONFIG_FLATMEM_MANUAL=y
347# CONFIG_DISCONTIGMEM_MANUAL is not set
348# CONFIG_SPARSEMEM_MANUAL is not set
349CONFIG_FLATMEM=y
350CONFIG_FLAT_NODE_MEM_MAP=y
351CONFIG_PAGEFLAGS_EXTENDED=y
352CONFIG_SPLIT_PTLOCK_CPUS=4
353# CONFIG_PHYS_ADDR_T_64BIT is not set
354CONFIG_ZONE_DMA_FLAG=0
355CONFIG_VIRT_TO_BUS=y
356# CONFIG_KSM is not set
357CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
358CONFIG_LEDS=y
359CONFIG_ALIGNMENT_TRAP=y
360# CONFIG_UACCESS_WITH_MEMCPY is not set
361CONFIG_CPU_V7_SYSFS=y
362
363#
364# Boot options
365#
366CONFIG_ZBOOT_ROM_TEXT=0x0
367CONFIG_ZBOOT_ROM_BSS=0x0
368CONFIG_CMDLINE=" debug "
369# CONFIG_XIP_KERNEL is not set
370CONFIG_KEXEC=y
371CONFIG_ATAGS_PROC=y
372
373#
374# CPU Power Management
375#
376CONFIG_CPU_FREQ=y
377CONFIG_CPU_FREQ_TABLE=y
378# CONFIG_CPU_FREQ_DEBUG is not set
379CONFIG_CPU_FREQ_STAT=y
380CONFIG_CPU_FREQ_STAT_DETAILS=y
381CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
382# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
383# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
384# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
385# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
386CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
387CONFIG_CPU_FREQ_GOV_POWERSAVE=y
388CONFIG_CPU_FREQ_GOV_USERSPACE=y
389CONFIG_CPU_FREQ_GOV_ONDEMAND=y
390CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
391CONFIG_CPU_IDLE=y
392CONFIG_CPU_IDLE_GOV_LADDER=y
393CONFIG_CPU_IDLE_GOV_MENU=y
394
395#
396# Floating point emulation
397#
398
399#
400# At least one emulation must be selected
401#
402CONFIG_VFP=y
403CONFIG_VFPv3=y
404CONFIG_NEON=y
405
406#
407# Userspace binary formats
408#
409CONFIG_BINFMT_ELF=y
410CONFIG_HAVE_AOUT=y
411CONFIG_BINFMT_AOUT=m
412CONFIG_BINFMT_MISC=m
413
414#
415# Power management options
416#
417CONFIG_PM=y
418CONFIG_PM_DEBUG=y
419# CONFIG_PM_VERBOSE is not set
420CONFIG_CAN_PM_TRACE=y
421CONFIG_PM_SLEEP=y
422CONFIG_SUSPEND=y
423# CONFIG_PM_TEST_SUSPEND is not set
424CONFIG_SUSPEND_FREEZER=y
425# CONFIG_APM_EMULATION is not set
426# CONFIG_PM_RUNTIME is not set
427CONFIG_ARCH_SUSPEND_POSSIBLE=y
428CONFIG_NET=y
429
430#
431# Networking options
432#
433CONFIG_PACKET=y
434CONFIG_PACKET_MMAP=y
435CONFIG_UNIX=y
436CONFIG_XFRM=y
437# CONFIG_XFRM_USER is not set
438# CONFIG_XFRM_SUB_POLICY is not set
439# CONFIG_XFRM_MIGRATE is not set
440# CONFIG_XFRM_STATISTICS is not set
441CONFIG_XFRM_IPCOMP=m
442CONFIG_NET_KEY=y
443# CONFIG_NET_KEY_MIGRATE is not set
444CONFIG_INET=y
445# CONFIG_IP_MULTICAST is not set
446# CONFIG_IP_ADVANCED_ROUTER is not set
447CONFIG_IP_FIB_HASH=y
448CONFIG_IP_PNP=y
449CONFIG_IP_PNP_DHCP=y
450CONFIG_IP_PNP_BOOTP=y
451CONFIG_IP_PNP_RARP=y
452CONFIG_NET_IPIP=m
453CONFIG_NET_IPGRE=m
454# CONFIG_ARPD is not set
455# CONFIG_SYN_COOKIES is not set
456CONFIG_INET_AH=m
457CONFIG_INET_ESP=m
458CONFIG_INET_IPCOMP=m
459CONFIG_INET_XFRM_TUNNEL=m
460CONFIG_INET_TUNNEL=m
461CONFIG_INET_XFRM_MODE_TRANSPORT=y
462CONFIG_INET_XFRM_MODE_TUNNEL=y
463CONFIG_INET_XFRM_MODE_BEET=y
464CONFIG_INET_LRO=y
465CONFIG_INET_DIAG=m
466CONFIG_INET_TCP_DIAG=m
467CONFIG_TCP_CONG_ADVANCED=y
468CONFIG_TCP_CONG_BIC=m
469CONFIG_TCP_CONG_CUBIC=y
470CONFIG_TCP_CONG_WESTWOOD=m
471CONFIG_TCP_CONG_HTCP=m
472CONFIG_TCP_CONG_HSTCP=m
473CONFIG_TCP_CONG_HYBLA=m
474CONFIG_TCP_CONG_VEGAS=m
475CONFIG_TCP_CONG_SCALABLE=m
476CONFIG_TCP_CONG_LP=m
477CONFIG_TCP_CONG_VENO=m
478CONFIG_TCP_CONG_YEAH=m
479CONFIG_TCP_CONG_ILLINOIS=m
480# CONFIG_DEFAULT_BIC is not set
481CONFIG_DEFAULT_CUBIC=y
482# CONFIG_DEFAULT_HTCP is not set
483# CONFIG_DEFAULT_VEGAS is not set
484# CONFIG_DEFAULT_WESTWOOD is not set
485# CONFIG_DEFAULT_RENO is not set
486CONFIG_DEFAULT_TCP_CONG="cubic"
487# CONFIG_TCP_MD5SIG is not set
488CONFIG_IPV6=m
489# CONFIG_IPV6_PRIVACY is not set
490# CONFIG_IPV6_ROUTER_PREF is not set
491# CONFIG_IPV6_OPTIMISTIC_DAD is not set
492CONFIG_INET6_AH=m
493CONFIG_INET6_ESP=m
494CONFIG_INET6_IPCOMP=m
495CONFIG_IPV6_MIP6=m
496CONFIG_INET6_XFRM_TUNNEL=m
497CONFIG_INET6_TUNNEL=m
498CONFIG_INET6_XFRM_MODE_TRANSPORT=m
499CONFIG_INET6_XFRM_MODE_TUNNEL=m
500CONFIG_INET6_XFRM_MODE_BEET=m
501CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
502CONFIG_IPV6_SIT=m
503# CONFIG_IPV6_SIT_6RD is not set
504CONFIG_IPV6_NDISC_NODETYPE=y
505CONFIG_IPV6_TUNNEL=m
506CONFIG_IPV6_MULTIPLE_TABLES=y
507CONFIG_IPV6_SUBTREES=y
508CONFIG_IPV6_MROUTE=y
509# CONFIG_IPV6_PIMSM_V2 is not set
510# CONFIG_NETWORK_SECMARK is not set
511CONFIG_NETFILTER=y
512# CONFIG_NETFILTER_DEBUG is not set
513CONFIG_NETFILTER_ADVANCED=y
514CONFIG_BRIDGE_NETFILTER=y
515
516#
517# Core Netfilter Configuration
518#
519CONFIG_NETFILTER_NETLINK=m
520CONFIG_NETFILTER_NETLINK_QUEUE=m
521CONFIG_NETFILTER_NETLINK_LOG=m
522CONFIG_NF_CONNTRACK=m
523CONFIG_NF_CT_ACCT=y
524CONFIG_NF_CONNTRACK_MARK=y
525CONFIG_NF_CONNTRACK_EVENTS=y
526CONFIG_NF_CT_PROTO_DCCP=m
527CONFIG_NF_CT_PROTO_GRE=m
528CONFIG_NF_CT_PROTO_SCTP=m
529CONFIG_NF_CT_PROTO_UDPLITE=m
530CONFIG_NF_CONNTRACK_AMANDA=m
531CONFIG_NF_CONNTRACK_FTP=m
532CONFIG_NF_CONNTRACK_H323=m
533CONFIG_NF_CONNTRACK_IRC=m
534CONFIG_NF_CONNTRACK_NETBIOS_NS=m
535CONFIG_NF_CONNTRACK_PPTP=m
536CONFIG_NF_CONNTRACK_SANE=m
537CONFIG_NF_CONNTRACK_SIP=m
538CONFIG_NF_CONNTRACK_TFTP=m
539CONFIG_NF_CT_NETLINK=m
540# CONFIG_NETFILTER_TPROXY is not set
541CONFIG_NETFILTER_XTABLES=m
542CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
543CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
544# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
545CONFIG_NETFILTER_XT_TARGET_HL=m
546# CONFIG_NETFILTER_XT_TARGET_LED is not set
547CONFIG_NETFILTER_XT_TARGET_MARK=m
548CONFIG_NETFILTER_XT_TARGET_NFLOG=m
549CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
550# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
551CONFIG_NETFILTER_XT_TARGET_RATEEST=m
552# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
553CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
554# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
555# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
556CONFIG_NETFILTER_XT_MATCH_COMMENT=m
557CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
558CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
559CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
560CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
561CONFIG_NETFILTER_XT_MATCH_DCCP=m
562CONFIG_NETFILTER_XT_MATCH_DSCP=m
563CONFIG_NETFILTER_XT_MATCH_ESP=m
564CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
565CONFIG_NETFILTER_XT_MATCH_HELPER=m
566CONFIG_NETFILTER_XT_MATCH_HL=m
567CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
568CONFIG_NETFILTER_XT_MATCH_LENGTH=m
569CONFIG_NETFILTER_XT_MATCH_LIMIT=m
570CONFIG_NETFILTER_XT_MATCH_MAC=m
571CONFIG_NETFILTER_XT_MATCH_MARK=m
572CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
573CONFIG_NETFILTER_XT_MATCH_OWNER=m
574CONFIG_NETFILTER_XT_MATCH_POLICY=m
575# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
576CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
577CONFIG_NETFILTER_XT_MATCH_QUOTA=m
578CONFIG_NETFILTER_XT_MATCH_RATEEST=m
579CONFIG_NETFILTER_XT_MATCH_REALM=m
580CONFIG_NETFILTER_XT_MATCH_RECENT=m
581# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set
582CONFIG_NETFILTER_XT_MATCH_SCTP=m
583CONFIG_NETFILTER_XT_MATCH_STATE=m
584CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
585CONFIG_NETFILTER_XT_MATCH_STRING=m
586CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
587CONFIG_NETFILTER_XT_MATCH_TIME=m
588CONFIG_NETFILTER_XT_MATCH_U32=m
589# CONFIG_NETFILTER_XT_MATCH_OSF is not set
590CONFIG_IP_VS=m
591CONFIG_IP_VS_IPV6=y
592CONFIG_IP_VS_DEBUG=y
593CONFIG_IP_VS_TAB_BITS=12
594
595#
596# IPVS transport protocol load balancing support
597#
598CONFIG_IP_VS_PROTO_TCP=y
599CONFIG_IP_VS_PROTO_UDP=y
600CONFIG_IP_VS_PROTO_AH_ESP=y
601CONFIG_IP_VS_PROTO_ESP=y
602CONFIG_IP_VS_PROTO_AH=y
603
604#
605# IPVS scheduler
606#
607CONFIG_IP_VS_RR=m
608CONFIG_IP_VS_WRR=m
609CONFIG_IP_VS_LC=m
610CONFIG_IP_VS_WLC=m
611CONFIG_IP_VS_LBLC=m
612CONFIG_IP_VS_LBLCR=m
613CONFIG_IP_VS_DH=m
614CONFIG_IP_VS_SH=m
615CONFIG_IP_VS_SED=m
616CONFIG_IP_VS_NQ=m
617
618#
619# IPVS application helper
620#
621CONFIG_IP_VS_FTP=m
622
623#
624# IP: Netfilter Configuration
625#
626CONFIG_NF_DEFRAG_IPV4=m
627CONFIG_NF_CONNTRACK_IPV4=m
628CONFIG_NF_CONNTRACK_PROC_COMPAT=y
629CONFIG_IP_NF_QUEUE=m
630CONFIG_IP_NF_IPTABLES=m
631CONFIG_IP_NF_MATCH_ADDRTYPE=m
632CONFIG_IP_NF_MATCH_AH=m
633CONFIG_IP_NF_MATCH_ECN=m
634CONFIG_IP_NF_MATCH_TTL=m
635CONFIG_IP_NF_FILTER=m
636CONFIG_IP_NF_TARGET_REJECT=m
637CONFIG_IP_NF_TARGET_LOG=m
638CONFIG_IP_NF_TARGET_ULOG=m
639CONFIG_NF_NAT=m
640CONFIG_NF_NAT_NEEDED=y
641CONFIG_IP_NF_TARGET_MASQUERADE=m
642CONFIG_IP_NF_TARGET_NETMAP=m
643CONFIG_IP_NF_TARGET_REDIRECT=m
644CONFIG_NF_NAT_SNMP_BASIC=m
645CONFIG_NF_NAT_PROTO_DCCP=m
646CONFIG_NF_NAT_PROTO_GRE=m
647CONFIG_NF_NAT_PROTO_UDPLITE=m
648CONFIG_NF_NAT_PROTO_SCTP=m
649CONFIG_NF_NAT_FTP=m
650CONFIG_NF_NAT_IRC=m
651CONFIG_NF_NAT_TFTP=m
652CONFIG_NF_NAT_AMANDA=m
653CONFIG_NF_NAT_PPTP=m
654CONFIG_NF_NAT_H323=m
655CONFIG_NF_NAT_SIP=m
656CONFIG_IP_NF_MANGLE=m
657CONFIG_IP_NF_TARGET_CLUSTERIP=m
658CONFIG_IP_NF_TARGET_ECN=m
659CONFIG_IP_NF_TARGET_TTL=m
660CONFIG_IP_NF_RAW=m
661CONFIG_IP_NF_ARPTABLES=m
662CONFIG_IP_NF_ARPFILTER=m
663CONFIG_IP_NF_ARP_MANGLE=m
664
665#
666# IPv6: Netfilter Configuration
667#
668CONFIG_NF_CONNTRACK_IPV6=m
669CONFIG_IP6_NF_QUEUE=m
670CONFIG_IP6_NF_IPTABLES=m
671CONFIG_IP6_NF_MATCH_AH=m
672CONFIG_IP6_NF_MATCH_EUI64=m
673CONFIG_IP6_NF_MATCH_FRAG=m
674CONFIG_IP6_NF_MATCH_OPTS=m
675CONFIG_IP6_NF_MATCH_HL=m
676CONFIG_IP6_NF_MATCH_IPV6HEADER=m
677CONFIG_IP6_NF_MATCH_MH=m
678CONFIG_IP6_NF_MATCH_RT=m
679CONFIG_IP6_NF_TARGET_HL=m
680CONFIG_IP6_NF_TARGET_LOG=m
681CONFIG_IP6_NF_FILTER=m
682CONFIG_IP6_NF_TARGET_REJECT=m
683CONFIG_IP6_NF_MANGLE=m
684CONFIG_IP6_NF_RAW=m
685# CONFIG_BRIDGE_NF_EBTABLES is not set
686CONFIG_IP_DCCP=m
687CONFIG_INET_DCCP_DIAG=m
688
689#
690# DCCP CCIDs Configuration (EXPERIMENTAL)
691#
692# CONFIG_IP_DCCP_CCID2_DEBUG is not set
693CONFIG_IP_DCCP_CCID3=y
694# CONFIG_IP_DCCP_CCID3_DEBUG is not set
695CONFIG_IP_DCCP_CCID3_RTO=100
696CONFIG_IP_DCCP_TFRC_LIB=y
697
698#
699# DCCP Kernel Hacking
700#
701# CONFIG_IP_DCCP_DEBUG is not set
702CONFIG_IP_SCTP=m
703# CONFIG_SCTP_DBG_MSG is not set
704# CONFIG_SCTP_DBG_OBJCNT is not set
705# CONFIG_SCTP_HMAC_NONE is not set
706# CONFIG_SCTP_HMAC_SHA1 is not set
707CONFIG_SCTP_HMAC_MD5=y
708# CONFIG_RDS is not set
709CONFIG_TIPC=m
710# CONFIG_TIPC_ADVANCED is not set
711# CONFIG_TIPC_DEBUG is not set
712CONFIG_ATM=m
713CONFIG_ATM_CLIP=m
714# CONFIG_ATM_CLIP_NO_ICMP is not set
715CONFIG_ATM_LANE=m
716CONFIG_ATM_MPOA=m
717CONFIG_ATM_BR2684=m
718# CONFIG_ATM_BR2684_IPFILTER is not set
719CONFIG_STP=m
720CONFIG_GARP=m
721CONFIG_BRIDGE=m
722# CONFIG_NET_DSA is not set
723CONFIG_VLAN_8021Q=m
724CONFIG_VLAN_8021Q_GVRP=y
725# CONFIG_DECNET is not set
726CONFIG_LLC=m
727# CONFIG_LLC2 is not set
728# CONFIG_IPX is not set
729# CONFIG_ATALK is not set
730# CONFIG_X25 is not set
731# CONFIG_LAPB is not set
732# CONFIG_ECONET is not set
733CONFIG_WAN_ROUTER=m
734# CONFIG_PHONET is not set
735CONFIG_IEEE802154=m
736CONFIG_NET_SCHED=y
737
738#
739# Queueing/Scheduling
740#
741CONFIG_NET_SCH_CBQ=m
742CONFIG_NET_SCH_HTB=m
743CONFIG_NET_SCH_HFSC=m
744CONFIG_NET_SCH_ATM=m
745CONFIG_NET_SCH_PRIO=m
746CONFIG_NET_SCH_MULTIQ=m
747CONFIG_NET_SCH_RED=m
748CONFIG_NET_SCH_SFQ=m
749CONFIG_NET_SCH_TEQL=m
750CONFIG_NET_SCH_TBF=m
751CONFIG_NET_SCH_GRED=m
752CONFIG_NET_SCH_DSMARK=m
753CONFIG_NET_SCH_NETEM=m
754CONFIG_NET_SCH_DRR=m
755
756#
757# Classification
758#
759CONFIG_NET_CLS=y
760CONFIG_NET_CLS_BASIC=m
761CONFIG_NET_CLS_TCINDEX=m
762CONFIG_NET_CLS_ROUTE4=m
763CONFIG_NET_CLS_ROUTE=y
764CONFIG_NET_CLS_FW=m
765CONFIG_NET_CLS_U32=m
766CONFIG_CLS_U32_PERF=y
767CONFIG_CLS_U32_MARK=y
768CONFIG_NET_CLS_RSVP=m
769CONFIG_NET_CLS_RSVP6=m
770CONFIG_NET_CLS_FLOW=m
771# CONFIG_NET_EMATCH is not set
772# CONFIG_NET_CLS_ACT is not set
773CONFIG_NET_CLS_IND=y
774CONFIG_NET_SCH_FIFO=y
775# CONFIG_DCB is not set
776
777#
778# Network testing
779#
780# CONFIG_NET_PKTGEN is not set
781# CONFIG_NET_DROP_MONITOR is not set
782# CONFIG_HAMRADIO is not set
783CONFIG_CAN=m
784CONFIG_CAN_RAW=m
785CONFIG_CAN_BCM=m
786
787#
788# CAN Device Drivers
789#
790CONFIG_CAN_VCAN=m
791# CONFIG_CAN_DEV is not set
792# CONFIG_CAN_DEBUG_DEVICES is not set
793CONFIG_IRDA=m
794
795#
796# IrDA protocols
797#
798CONFIG_IRLAN=m
799CONFIG_IRNET=m
800CONFIG_IRCOMM=m
801CONFIG_IRDA_ULTRA=y
802
803#
804# IrDA options
805#
806CONFIG_IRDA_CACHE_LAST_LSAP=y
807CONFIG_IRDA_FAST_RR=y
808CONFIG_IRDA_DEBUG=y
809
810#
811# Infrared-port device drivers
812#
813
814#
815# SIR device drivers
816#
817CONFIG_IRTTY_SIR=m
818
819#
820# Dongle support
821#
822CONFIG_DONGLE=y
823CONFIG_ESI_DONGLE=m
824CONFIG_ACTISYS_DONGLE=m
825CONFIG_TEKRAM_DONGLE=m
826CONFIG_TOIM3232_DONGLE=m
827CONFIG_LITELINK_DONGLE=m
828CONFIG_MA600_DONGLE=m
829CONFIG_GIRBIL_DONGLE=m
830CONFIG_MCP2120_DONGLE=m
831CONFIG_OLD_BELKIN_DONGLE=m
832# CONFIG_ACT200L_DONGLE is not set
833CONFIG_KINGSUN_DONGLE=m
834CONFIG_KSDAZZLE_DONGLE=m
835CONFIG_KS959_DONGLE=m
836
837#
838# FIR device drivers
839#
840CONFIG_USB_IRDA=m
841CONFIG_SIGMATEL_FIR=m
842CONFIG_MCS_FIR=m
843CONFIG_BT=m
844CONFIG_BT_L2CAP=m
845CONFIG_BT_SCO=m
846CONFIG_BT_RFCOMM=m
847CONFIG_BT_RFCOMM_TTY=y
848CONFIG_BT_BNEP=m
849CONFIG_BT_BNEP_MC_FILTER=y
850CONFIG_BT_BNEP_PROTO_FILTER=y
851CONFIG_BT_HIDP=m
852
853#
854# Bluetooth device drivers
855#
856CONFIG_BT_HCIBTUSB=m
857CONFIG_BT_HCIBTSDIO=m
858CONFIG_BT_HCIUART=m
859CONFIG_BT_HCIUART_H4=y
860CONFIG_BT_HCIUART_BCSP=y
861CONFIG_BT_HCIUART_LL=y
862CONFIG_BT_HCIBCM203X=m
863CONFIG_BT_HCIBPA10X=m
864CONFIG_BT_HCIBFUSB=m
865# CONFIG_BT_HCIVHCI is not set
866# CONFIG_BT_MRVL is not set
867CONFIG_AF_RXRPC=m
868# CONFIG_AF_RXRPC_DEBUG is not set
869# CONFIG_RXKAD is not set
870CONFIG_FIB_RULES=y
871CONFIG_WIRELESS=y
872CONFIG_WIRELESS_EXT=y
873CONFIG_WEXT_CORE=y
874CONFIG_WEXT_PROC=y
875CONFIG_WEXT_SPY=y
876CONFIG_WEXT_PRIV=y
877CONFIG_CFG80211=m
878# CONFIG_NL80211_TESTMODE is not set
879# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
880# CONFIG_CFG80211_REG_DEBUG is not set
881CONFIG_CFG80211_DEFAULT_PS=y
882# CONFIG_CFG80211_DEBUGFS is not set
883CONFIG_WIRELESS_OLD_REGULATORY=y
884CONFIG_CFG80211_WEXT=y
885CONFIG_WIRELESS_EXT_SYSFS=y
886CONFIG_LIB80211=y
887CONFIG_LIB80211_CRYPT_WEP=m
888CONFIG_LIB80211_CRYPT_CCMP=m
889CONFIG_LIB80211_CRYPT_TKIP=m
890# CONFIG_LIB80211_DEBUG is not set
891CONFIG_MAC80211=m
892CONFIG_MAC80211_RC_PID=y
893CONFIG_MAC80211_RC_MINSTREL=y
894CONFIG_MAC80211_RC_DEFAULT_PID=y
895# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
896CONFIG_MAC80211_RC_DEFAULT="pid"
897# CONFIG_MAC80211_MESH is not set
898CONFIG_MAC80211_LEDS=y
899# CONFIG_MAC80211_DEBUGFS is not set
900# CONFIG_MAC80211_DEBUG_MENU is not set
901CONFIG_WIMAX=m
902CONFIG_WIMAX_DEBUG_LEVEL=8
903CONFIG_RFKILL=m
904CONFIG_RFKILL_LEDS=y
905CONFIG_RFKILL_INPUT=y
906CONFIG_NET_9P=m
907# CONFIG_NET_9P_DEBUG is not set
908
909#
910# Device Drivers
911#
912
913#
914# Generic Driver Options
915#
916CONFIG_UEVENT_HELPER_PATH=""
917CONFIG_DEVTMPFS=y
918CONFIG_DEVTMPFS_MOUNT=y
919CONFIG_STANDALONE=y
920CONFIG_PREVENT_FIRMWARE_BUILD=y
921CONFIG_FW_LOADER=y
922CONFIG_FIRMWARE_IN_KERNEL=y
923CONFIG_EXTRA_FIRMWARE=""
924# CONFIG_DEBUG_DRIVER is not set
925# CONFIG_DEBUG_DEVRES is not set
926# CONFIG_SYS_HYPERVISOR is not set
927# CONFIG_CONNECTOR is not set
928CONFIG_MTD=y
929# CONFIG_MTD_DEBUG is not set
930# CONFIG_MTD_TESTS is not set
931CONFIG_MTD_CONCAT=y
932CONFIG_MTD_PARTITIONS=y
933# CONFIG_MTD_REDBOOT_PARTS is not set
934# CONFIG_MTD_CMDLINE_PARTS is not set
935# CONFIG_MTD_AFS_PARTS is not set
936# CONFIG_MTD_AR7_PARTS is not set
937
938#
939# User Modules And Translation Layers
940#
941CONFIG_MTD_CHAR=y
942CONFIG_MTD_BLKDEVS=y
943CONFIG_MTD_BLOCK=y
944# CONFIG_FTL is not set
945# CONFIG_NFTL is not set
946# CONFIG_INFTL is not set
947# CONFIG_RFD_FTL is not set
948# CONFIG_SSFDC is not set
949# CONFIG_MTD_OOPS is not set
950
951#
952# RAM/ROM/Flash chip drivers
953#
954# CONFIG_MTD_CFI is not set
955# CONFIG_MTD_JEDECPROBE is not set
956CONFIG_MTD_MAP_BANK_WIDTH_1=y
957CONFIG_MTD_MAP_BANK_WIDTH_2=y
958CONFIG_MTD_MAP_BANK_WIDTH_4=y
959# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
960# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
961# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
962CONFIG_MTD_CFI_I1=y
963CONFIG_MTD_CFI_I2=y
964# CONFIG_MTD_CFI_I4 is not set
965# CONFIG_MTD_CFI_I8 is not set
966# CONFIG_MTD_RAM is not set
967# CONFIG_MTD_ROM is not set
968# CONFIG_MTD_ABSENT is not set
969
970#
971# Mapping drivers for chip access
972#
973# CONFIG_MTD_COMPLEX_MAPPINGS is not set
974# CONFIG_MTD_PLATRAM is not set
975
976#
977# Self-contained MTD device drivers
978#
979# CONFIG_MTD_DATAFLASH is not set
980# CONFIG_MTD_M25P80 is not set
981# CONFIG_MTD_SST25L is not set
982# CONFIG_MTD_SLRAM is not set
983# CONFIG_MTD_PHRAM is not set
984# CONFIG_MTD_MTDRAM is not set
985# CONFIG_MTD_BLOCK2MTD is not set
986
987#
988# Disk-On-Chip Device Drivers
989#
990# CONFIG_MTD_DOC2000 is not set
991# CONFIG_MTD_DOC2001 is not set
992# CONFIG_MTD_DOC2001PLUS is not set
993CONFIG_MTD_NAND=y
994# CONFIG_MTD_NAND_VERIFY_WRITE is not set
995# CONFIG_MTD_NAND_ECC_SMC is not set
996# CONFIG_MTD_NAND_MUSEUM_IDS is not set
997# CONFIG_MTD_NAND_GPIO is not set
998CONFIG_MTD_NAND_OMAP2=y
999CONFIG_MTD_NAND_OMAP_PREFETCH=y
1000# CONFIG_MTD_NAND_OMAP_PREFETCH_DMA is not set
1001CONFIG_MTD_NAND_IDS=y
1002# CONFIG_MTD_NAND_DISKONCHIP is not set
1003# CONFIG_MTD_NAND_NANDSIM is not set
1004CONFIG_MTD_NAND_PLATFORM=y
1005# CONFIG_MTD_ALAUDA is not set
1006# CONFIG_MTD_ONENAND is not set
1007
1008#
1009# LPDDR flash memory drivers
1010#
1011# CONFIG_MTD_LPDDR is not set
1012
1013#
1014# UBI - Unsorted block images
1015#
1016CONFIG_MTD_UBI=y
1017CONFIG_MTD_UBI_WL_THRESHOLD=4096
1018CONFIG_MTD_UBI_BEB_RESERVE=1
1019# CONFIG_MTD_UBI_GLUEBI is not set
1020
1021#
1022# UBI debugging options
1023#
1024# CONFIG_MTD_UBI_DEBUG is not set
1025# CONFIG_PARPORT is not set
1026CONFIG_BLK_DEV=y
1027# CONFIG_BLK_DEV_COW_COMMON is not set
1028CONFIG_BLK_DEV_LOOP=y
1029CONFIG_BLK_DEV_CRYPTOLOOP=m
1030
1031#
1032# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
1033#
1034# CONFIG_BLK_DEV_NBD is not set
1035# CONFIG_BLK_DEV_UB is not set
1036CONFIG_BLK_DEV_RAM=y
1037CONFIG_BLK_DEV_RAM_COUNT=16
1038CONFIG_BLK_DEV_RAM_SIZE=16384
1039# CONFIG_BLK_DEV_XIP is not set
1040CONFIG_CDROM_PKTCDVD=m
1041CONFIG_CDROM_PKTCDVD_BUFFERS=8
1042# CONFIG_CDROM_PKTCDVD_WCACHE is not set
1043# CONFIG_ATA_OVER_ETH is not set
1044# CONFIG_MG_DISK is not set
1045CONFIG_MISC_DEVICES=y
1046# CONFIG_AD525X_DPOT is not set
1047# CONFIG_ICS932S401 is not set
1048# CONFIG_ENCLOSURE_SERVICES is not set
1049CONFIG_CS5535_MFGPT_DEFAULT_IRQ=7
1050# CONFIG_ISL29003 is not set
1051# CONFIG_DS1682 is not set
1052# CONFIG_TI_DAC7512 is not set
1053# CONFIG_C2PORT is not set
1054
1055#
1056# EEPROM support
1057#
1058# CONFIG_EEPROM_AT24 is not set
1059# CONFIG_EEPROM_AT25 is not set
1060# CONFIG_EEPROM_LEGACY is not set
1061# CONFIG_EEPROM_MAX6875 is not set
1062CONFIG_EEPROM_93CX6=y
1063# CONFIG_IWMC3200TOP is not set
1064CONFIG_HAVE_IDE=y
1065# CONFIG_IDE is not set
1066
1067#
1068# SCSI device support
1069#
1070CONFIG_RAID_ATTRS=m
1071CONFIG_SCSI=y
1072CONFIG_SCSI_DMA=y
1073# CONFIG_SCSI_TGT is not set
1074# CONFIG_SCSI_NETLINK is not set
1075CONFIG_SCSI_PROC_FS=y
1076
1077#
1078# SCSI support type (disk, tape, CD-ROM)
1079#
1080CONFIG_BLK_DEV_SD=y
1081# CONFIG_CHR_DEV_ST is not set
1082# CONFIG_CHR_DEV_OSST is not set
1083CONFIG_BLK_DEV_SR=y
1084CONFIG_BLK_DEV_SR_VENDOR=y
1085CONFIG_CHR_DEV_SG=y
1086CONFIG_CHR_DEV_SCH=m
1087CONFIG_SCSI_MULTI_LUN=y
1088# CONFIG_SCSI_CONSTANTS is not set
1089# CONFIG_SCSI_LOGGING is not set
1090CONFIG_SCSI_SCAN_ASYNC=y
1091CONFIG_SCSI_WAIT_SCAN=m
1092
1093#
1094# SCSI Transports
1095#
1096# CONFIG_SCSI_SPI_ATTRS is not set
1097# CONFIG_SCSI_FC_ATTRS is not set
1098CONFIG_SCSI_ISCSI_ATTRS=m
1099# CONFIG_SCSI_SAS_ATTRS is not set
1100# CONFIG_SCSI_SAS_LIBSAS is not set
1101# CONFIG_SCSI_SRP_ATTRS is not set
1102CONFIG_SCSI_LOWLEVEL=y
1103CONFIG_ISCSI_TCP=m
1104# CONFIG_LIBFC is not set
1105# CONFIG_LIBFCOE is not set
1106# CONFIG_SCSI_DEBUG is not set
1107# CONFIG_SCSI_DH is not set
1108# CONFIG_SCSI_OSD_INITIATOR is not set
1109# CONFIG_ATA is not set
1110CONFIG_MD=y
1111CONFIG_BLK_DEV_MD=m
1112CONFIG_MD_LINEAR=m
1113CONFIG_MD_RAID0=m
1114CONFIG_MD_RAID1=m
1115CONFIG_MD_RAID10=m
1116CONFIG_MD_RAID456=m
1117CONFIG_MD_RAID6_PQ=m
1118# CONFIG_ASYNC_RAID6_TEST is not set
1119CONFIG_MD_MULTIPATH=m
1120CONFIG_MD_FAULTY=m
1121CONFIG_BLK_DEV_DM=m
1122# CONFIG_DM_DEBUG is not set
1123CONFIG_DM_CRYPT=m
1124CONFIG_DM_SNAPSHOT=m
1125CONFIG_DM_MIRROR=m
1126# CONFIG_DM_LOG_USERSPACE is not set
1127CONFIG_DM_ZERO=m
1128CONFIG_DM_MULTIPATH=m
1129# CONFIG_DM_MULTIPATH_QL is not set
1130# CONFIG_DM_MULTIPATH_ST is not set
1131CONFIG_DM_DELAY=m
1132CONFIG_DM_UEVENT=y
1133CONFIG_NETDEVICES=y
1134CONFIG_DUMMY=m
1135CONFIG_BONDING=m
1136CONFIG_MACVLAN=m
1137CONFIG_EQUALIZER=m
1138CONFIG_TUN=m
1139CONFIG_VETH=m
1140# CONFIG_NET_ETHERNET is not set
1141CONFIG_MII=m
1142# CONFIG_NETDEV_1000 is not set
1143# CONFIG_NETDEV_10000 is not set
1144CONFIG_WLAN=y
1145# CONFIG_LIBERTAS_THINFIRM is not set
1146# CONFIG_AT76C50X_USB is not set
1147CONFIG_USB_ZD1201=m
1148CONFIG_USB_NET_RNDIS_WLAN=m
1149CONFIG_RTL8187=m
1150CONFIG_RTL8187_LEDS=y
1151# CONFIG_MAC80211_HWSIM is not set
1152# CONFIG_ATH_COMMON is not set
1153CONFIG_B43=m
1154# CONFIG_B43_SDIO is not set
1155CONFIG_B43_PHY_LP=y
1156CONFIG_B43_LEDS=y
1157CONFIG_B43_HWRNG=y
1158# CONFIG_B43_DEBUG is not set
1159# CONFIG_B43LEGACY is not set
1160CONFIG_HOSTAP=m
1161CONFIG_HOSTAP_FIRMWARE=y
1162CONFIG_HOSTAP_FIRMWARE_NVRAM=y
1163# CONFIG_IWM is not set
1164CONFIG_LIBERTAS=m
1165CONFIG_LIBERTAS_USB=m
1166# CONFIG_LIBERTAS_SDIO is not set
1167# CONFIG_LIBERTAS_SPI is not set
1168# CONFIG_LIBERTAS_DEBUG is not set
1169CONFIG_P54_COMMON=m
1170CONFIG_P54_USB=m
1171# CONFIG_P54_SPI is not set
1172CONFIG_P54_LEDS=y
1173CONFIG_RT2X00=m
1174CONFIG_RT2500USB=m
1175CONFIG_RT73USB=m
1176CONFIG_RT2800USB=m
1177CONFIG_RT2800_LIB=m
1178CONFIG_RT2X00_LIB_USB=m
1179CONFIG_RT2X00_LIB=m
1180CONFIG_RT2X00_LIB_HT=y
1181CONFIG_RT2X00_LIB_FIRMWARE=y
1182CONFIG_RT2X00_LIB_CRYPTO=y
1183CONFIG_RT2X00_LIB_LEDS=y
1184# CONFIG_RT2X00_DEBUG is not set
1185# CONFIG_WL12XX is not set
1186CONFIG_ZD1211RW=m
1187# CONFIG_ZD1211RW_DEBUG is not set
1188
1189#
1190# WiMAX Wireless Broadband devices
1191#
1192# CONFIG_WIMAX_I2400M_USB is not set
1193# CONFIG_WIMAX_I2400M_SDIO is not set
1194
1195#
1196# USB Network Adapters
1197#
1198CONFIG_USB_CATC=m
1199CONFIG_USB_KAWETH=m
1200CONFIG_USB_PEGASUS=m
1201CONFIG_USB_RTL8150=m
1202CONFIG_USB_USBNET=m
1203CONFIG_USB_NET_AX8817X=m
1204CONFIG_USB_NET_CDCETHER=m
1205# CONFIG_USB_NET_CDC_EEM is not set
1206CONFIG_USB_NET_DM9601=m
1207CONFIG_USB_NET_SMSC95XX=m
1208CONFIG_USB_NET_GL620A=m
1209CONFIG_USB_NET_NET1080=m
1210CONFIG_USB_NET_PLUSB=m
1211CONFIG_USB_NET_MCS7830=m
1212CONFIG_USB_NET_RNDIS_HOST=m
1213CONFIG_USB_NET_CDC_SUBSET=m
1214CONFIG_USB_ALI_M5632=y
1215CONFIG_USB_AN2720=y
1216CONFIG_USB_BELKIN=y
1217CONFIG_USB_ARMLINUX=y
1218CONFIG_USB_EPSON2888=y
1219CONFIG_USB_KC2190=y
1220CONFIG_USB_NET_ZAURUS=m
1221# CONFIG_USB_HSO is not set
1222# CONFIG_USB_NET_INT51X1 is not set
1223# CONFIG_WAN is not set
1224CONFIG_ATM_DRIVERS=y
1225# CONFIG_ATM_DUMMY is not set
1226# CONFIG_ATM_TCP is not set
1227CONFIG_IEEE802154_DRIVERS=m
1228# CONFIG_IEEE802154_FAKEHARD is not set
1229CONFIG_PPP=m
1230CONFIG_PPP_MULTILINK=y
1231CONFIG_PPP_FILTER=y
1232CONFIG_PPP_ASYNC=m
1233CONFIG_PPP_SYNC_TTY=m
1234CONFIG_PPP_DEFLATE=m
1235CONFIG_PPP_BSDCOMP=m
1236CONFIG_PPP_MPPE=m
1237CONFIG_PPPOE=m
1238# CONFIG_PPPOATM is not set
1239CONFIG_PPPOL2TP=m
1240# CONFIG_SLIP is not set
1241CONFIG_SLHC=m
1242CONFIG_NETCONSOLE=m
1243CONFIG_NETCONSOLE_DYNAMIC=y
1244CONFIG_NETPOLL=y
1245CONFIG_NETPOLL_TRAP=y
1246CONFIG_NET_POLL_CONTROLLER=y
1247# CONFIG_ISDN is not set
1248# CONFIG_PHONE is not set
1249
1250#
1251# Input device support
1252#
1253CONFIG_INPUT=y
1254CONFIG_INPUT_FF_MEMLESS=y
1255# CONFIG_INPUT_POLLDEV is not set
1256# CONFIG_INPUT_SPARSEKMAP is not set
1257
1258#
1259# Userland interfaces
1260#
1261CONFIG_INPUT_MOUSEDEV=y
1262CONFIG_INPUT_MOUSEDEV_PSAUX=y
1263CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
1264CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
1265# CONFIG_INPUT_JOYDEV is not set
1266CONFIG_INPUT_EVDEV=y
1267# CONFIG_INPUT_EVBUG is not set
1268
1269#
1270# Input Device Drivers
1271#
1272CONFIG_INPUT_KEYBOARD=y
1273# CONFIG_KEYBOARD_ADP5588 is not set
1274# CONFIG_KEYBOARD_ATKBD is not set
1275# CONFIG_QT2160 is not set
1276# CONFIG_KEYBOARD_LKKBD is not set
1277CONFIG_KEYBOARD_GPIO=y
1278# CONFIG_KEYBOARD_TCA6416 is not set
1279# CONFIG_KEYBOARD_MATRIX is not set
1280# CONFIG_KEYBOARD_LM8323 is not set
1281# CONFIG_KEYBOARD_MAX7359 is not set
1282# CONFIG_KEYBOARD_NEWTON is not set
1283# CONFIG_KEYBOARD_OPENCORES is not set
1284# CONFIG_KEYBOARD_STOWAWAY is not set
1285# CONFIG_KEYBOARD_SUNKBD is not set
1286# CONFIG_KEYBOARD_TWL4030 is not set
1287# CONFIG_KEYBOARD_XTKBD is not set
1288CONFIG_INPUT_MOUSE=y
1289CONFIG_MOUSE_PS2=y
1290CONFIG_MOUSE_PS2_ALPS=y
1291CONFIG_MOUSE_PS2_LOGIPS2PP=y
1292CONFIG_MOUSE_PS2_SYNAPTICS=y
1293CONFIG_MOUSE_PS2_TRACKPOINT=y
1294# CONFIG_MOUSE_PS2_ELANTECH is not set
1295# CONFIG_MOUSE_PS2_SENTELIC is not set
1296# CONFIG_MOUSE_PS2_TOUCHKIT is not set
1297# CONFIG_MOUSE_SERIAL is not set
1298# CONFIG_MOUSE_APPLETOUCH is not set
1299# CONFIG_MOUSE_BCM5974 is not set
1300# CONFIG_MOUSE_VSXXXAA is not set
1301# CONFIG_MOUSE_GPIO is not set
1302# CONFIG_MOUSE_SYNAPTICS_I2C is not set
1303# CONFIG_INPUT_JOYSTICK is not set
1304# CONFIG_INPUT_TABLET is not set
1305CONFIG_INPUT_TOUCHSCREEN=y
1306CONFIG_TOUCHSCREEN_ADS7846=y
1307# CONFIG_TOUCHSCREEN_AD7877 is not set
1308# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
1309# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
1310# CONFIG_TOUCHSCREEN_AD7879 is not set
1311# CONFIG_TOUCHSCREEN_DYNAPRO is not set
1312# CONFIG_TOUCHSCREEN_EETI is not set
1313# CONFIG_TOUCHSCREEN_FUJITSU is not set
1314# CONFIG_TOUCHSCREEN_GUNZE is not set
1315# CONFIG_TOUCHSCREEN_ELO is not set
1316# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
1317# CONFIG_TOUCHSCREEN_MCS5000 is not set
1318# CONFIG_TOUCHSCREEN_MTOUCH is not set
1319# CONFIG_TOUCHSCREEN_INEXIO is not set
1320# CONFIG_TOUCHSCREEN_MK712 is not set
1321# CONFIG_TOUCHSCREEN_PENMOUNT is not set
1322# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
1323# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
1324# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
1325# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
1326# CONFIG_TOUCHSCREEN_TSC2007 is not set
1327# CONFIG_TOUCHSCREEN_TSC2004 is not set
1328# CONFIG_TOUCHSCREEN_W90X900 is not set
1329CONFIG_INPUT_MISC=y
1330# CONFIG_INPUT_ATI_REMOTE is not set
1331# CONFIG_INPUT_ATI_REMOTE2 is not set
1332# CONFIG_INPUT_KEYSPAN_REMOTE is not set
1333CONFIG_INPUT_POWERMATE=m
1334# CONFIG_INPUT_YEALINK is not set
1335# CONFIG_INPUT_CM109 is not set
1336CONFIG_INPUT_TWL4030_PWRBUTTON=y
1337CONFIG_INPUT_UINPUT=y
1338# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
1339CONFIG_INPUT_MMA7455L=y
1340
1341#
1342# Hardware I/O ports
1343#
1344CONFIG_SERIO=y
1345CONFIG_SERIO_SERPORT=y
1346CONFIG_SERIO_LIBPS2=y
1347# CONFIG_SERIO_RAW is not set
1348# CONFIG_SERIO_ALTERA_PS2 is not set
1349# CONFIG_GAMEPORT is not set
1350
1351#
1352# Character devices
1353#
1354CONFIG_VT=y
1355CONFIG_CONSOLE_TRANSLATIONS=y
1356CONFIG_VT_CONSOLE=y
1357CONFIG_HW_CONSOLE=y
1358CONFIG_VT_HW_CONSOLE_BINDING=y
1359CONFIG_DEVKMEM=y
1360# CONFIG_SERIAL_NONSTANDARD is not set
1361
1362#
1363# Serial drivers
1364#
1365CONFIG_SERIAL_8250=y
1366CONFIG_SERIAL_8250_CONSOLE=y
1367CONFIG_SERIAL_8250_NR_UARTS=32
1368CONFIG_SERIAL_8250_RUNTIME_UARTS=4
1369CONFIG_SERIAL_8250_EXTENDED=y
1370CONFIG_SERIAL_8250_MANY_PORTS=y
1371CONFIG_SERIAL_8250_SHARE_IRQ=y
1372CONFIG_SERIAL_8250_DETECT_IRQ=y
1373CONFIG_SERIAL_8250_RSA=y
1374
1375#
1376# Non-8250 serial port support
1377#
1378# CONFIG_SERIAL_MAX3100 is not set
1379CONFIG_SERIAL_CORE=y
1380CONFIG_SERIAL_CORE_CONSOLE=y
1381CONFIG_UNIX98_PTYS=y
1382# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
1383# CONFIG_LEGACY_PTYS is not set
1384# CONFIG_IPMI_HANDLER is not set
1385CONFIG_HW_RANDOM=y
1386# CONFIG_HW_RANDOM_TIMERIOMEM is not set
1387# CONFIG_R3964 is not set
1388CONFIG_RAW_DRIVER=m
1389CONFIG_MAX_RAW_DEVS=256
1390# CONFIG_TCG_TPM is not set
1391CONFIG_I2C=y
1392CONFIG_I2C_BOARDINFO=y
1393CONFIG_I2C_COMPAT=y
1394CONFIG_I2C_CHARDEV=y
1395CONFIG_I2C_HELPER_AUTO=y
1396
1397#
1398# I2C Hardware Bus support
1399#
1400
1401#
1402# I2C system bus drivers (mostly embedded / system-on-chip)
1403#
1404# CONFIG_I2C_DESIGNWARE is not set
1405# CONFIG_I2C_GPIO is not set
1406# CONFIG_I2C_OCORES is not set
1407CONFIG_I2C_OMAP=y
1408# CONFIG_I2C_SIMTEC is not set
1409
1410#
1411# External I2C/SMBus adapter drivers
1412#
1413# CONFIG_I2C_PARPORT_LIGHT is not set
1414# CONFIG_I2C_TAOS_EVM is not set
1415CONFIG_I2C_TINY_USB=m
1416
1417#
1418# Other I2C/SMBus bus drivers
1419#
1420# CONFIG_I2C_PCA_PLATFORM is not set
1421# CONFIG_I2C_STUB is not set
1422
1423#
1424# Miscellaneous I2C Chip support
1425#
1426# CONFIG_SENSORS_TSL2550 is not set
1427# CONFIG_I2C_DEBUG_CORE is not set
1428# CONFIG_I2C_DEBUG_ALGO is not set
1429# CONFIG_I2C_DEBUG_BUS is not set
1430# CONFIG_I2C_DEBUG_CHIP is not set
1431CONFIG_SPI=y
1432# CONFIG_SPI_DEBUG is not set
1433CONFIG_SPI_MASTER=y
1434
1435#
1436# SPI Master Controller Drivers
1437#
1438# CONFIG_SPI_BITBANG is not set
1439# CONFIG_SPI_GPIO is not set
1440CONFIG_SPI_OMAP24XX=y
1441# CONFIG_SPI_XILINX is not set
1442
1443#
1444# SPI Protocol Masters
1445#
1446# CONFIG_SPI_SPIDEV is not set
1447# CONFIG_SPI_TLE62X0 is not set
1448
1449#
1450# PPS support
1451#
1452# CONFIG_PPS is not set
1453CONFIG_ARCH_REQUIRE_GPIOLIB=y
1454CONFIG_GPIOLIB=y
1455# CONFIG_DEBUG_GPIO is not set
1456CONFIG_GPIO_SYSFS=y
1457
1458#
1459# Memory mapped GPIO expanders:
1460#
1461
1462#
1463# I2C GPIO expanders:
1464#
1465# CONFIG_GPIO_MAX732X is not set
1466# CONFIG_GPIO_PCA953X is not set
1467# CONFIG_GPIO_PCF857X is not set
1468CONFIG_GPIO_TWL4030=y
1469
1470#
1471# PCI GPIO expanders:
1472#
1473
1474#
1475# SPI GPIO expanders:
1476#
1477# CONFIG_GPIO_MAX7301 is not set
1478# CONFIG_GPIO_MCP23S08 is not set
1479# CONFIG_GPIO_MC33880 is not set
1480
1481#
1482# AC97 GPIO expanders:
1483#
1484# CONFIG_W1 is not set
1485CONFIG_POWER_SUPPLY=y
1486# CONFIG_POWER_SUPPLY_DEBUG is not set
1487# CONFIG_PDA_POWER is not set
1488# CONFIG_BATTERY_DS2760 is not set
1489# CONFIG_BATTERY_DS2782 is not set
1490CONFIG_BATTERY_BQ27x00=y
1491# CONFIG_BATTERY_MAX17040 is not set
1492CONFIG_TWL4030_BCI_BATTERY=y
1493CONFIG_HWMON=y
1494# CONFIG_HWMON_VID is not set
1495# CONFIG_HWMON_DEBUG_CHIP is not set
1496
1497#
1498# Native drivers
1499#
1500# CONFIG_SENSORS_AD7414 is not set
1501# CONFIG_SENSORS_AD7418 is not set
1502# CONFIG_SENSORS_ADCXX is not set
1503# CONFIG_SENSORS_ADM1021 is not set
1504# CONFIG_SENSORS_ADM1025 is not set
1505# CONFIG_SENSORS_ADM1026 is not set
1506# CONFIG_SENSORS_ADM1029 is not set
1507# CONFIG_SENSORS_ADM1031 is not set
1508# CONFIG_SENSORS_ADM9240 is not set
1509# CONFIG_SENSORS_ADT7462 is not set
1510# CONFIG_SENSORS_ADT7470 is not set
1511# CONFIG_SENSORS_ADT7473 is not set
1512# CONFIG_SENSORS_ADT7475 is not set
1513# CONFIG_SENSORS_ATXP1 is not set
1514# CONFIG_SENSORS_DS1621 is not set
1515# CONFIG_SENSORS_F71805F is not set
1516# CONFIG_SENSORS_F71882FG is not set
1517# CONFIG_SENSORS_F75375S is not set
1518# CONFIG_SENSORS_G760A is not set
1519# CONFIG_SENSORS_GL518SM is not set
1520# CONFIG_SENSORS_GL520SM is not set
1521# CONFIG_SENSORS_IT87 is not set
1522# CONFIG_SENSORS_LM63 is not set
1523# CONFIG_SENSORS_LM70 is not set
1524# CONFIG_SENSORS_LM73 is not set
1525# CONFIG_SENSORS_LM75 is not set
1526# CONFIG_SENSORS_LM77 is not set
1527# CONFIG_SENSORS_LM78 is not set
1528# CONFIG_SENSORS_LM80 is not set
1529# CONFIG_SENSORS_LM83 is not set
1530# CONFIG_SENSORS_LM85 is not set
1531# CONFIG_SENSORS_LM87 is not set
1532# CONFIG_SENSORS_LM90 is not set
1533# CONFIG_SENSORS_LM92 is not set
1534# CONFIG_SENSORS_LM93 is not set
1535# CONFIG_SENSORS_LTC4215 is not set
1536# CONFIG_SENSORS_LTC4245 is not set
1537# CONFIG_SENSORS_LM95241 is not set
1538# CONFIG_SENSORS_MAX1111 is not set
1539# CONFIG_SENSORS_MAX1619 is not set
1540# CONFIG_SENSORS_MAX6650 is not set
1541# CONFIG_SENSORS_PC87360 is not set
1542# CONFIG_SENSORS_PC87427 is not set
1543# CONFIG_SENSORS_PCF8591 is not set
1544# CONFIG_SENSORS_SHT15 is not set
1545# CONFIG_SENSORS_DME1737 is not set
1546# CONFIG_SENSORS_SMSC47M1 is not set
1547# CONFIG_SENSORS_SMSC47M192 is not set
1548# CONFIG_SENSORS_SMSC47B397 is not set
1549# CONFIG_SENSORS_ADS7828 is not set
1550# CONFIG_SENSORS_THMC50 is not set
1551# CONFIG_SENSORS_TMP401 is not set
1552# CONFIG_SENSORS_TMP421 is not set
1553# CONFIG_SENSORS_VT1211 is not set
1554# CONFIG_SENSORS_W83781D is not set
1555# CONFIG_SENSORS_W83791D is not set
1556# CONFIG_SENSORS_W83792D is not set
1557# CONFIG_SENSORS_W83793 is not set
1558# CONFIG_SENSORS_W83L785TS is not set
1559# CONFIG_SENSORS_W83L786NG is not set
1560# CONFIG_SENSORS_W83627HF is not set
1561# CONFIG_SENSORS_W83627EHF is not set
1562# CONFIG_SENSORS_LIS3_SPI is not set
1563CONFIG_THERMAL=y
1564CONFIG_THERMAL_HWMON=y
1565CONFIG_WATCHDOG=y
1566CONFIG_WATCHDOG_NOWAYOUT=y
1567
1568#
1569# Watchdog Device Drivers
1570#
1571# CONFIG_SOFT_WATCHDOG is not set
1572CONFIG_OMAP_WATCHDOG=y
1573CONFIG_TWL4030_WATCHDOG=m
1574
1575#
1576# USB-based Watchdog Cards
1577#
1578# CONFIG_USBPCWATCHDOG is not set
1579CONFIG_SSB_POSSIBLE=y
1580
1581#
1582# Sonics Silicon Backplane
1583#
1584CONFIG_SSB=y
1585CONFIG_SSB_SDIOHOST_POSSIBLE=y
1586# CONFIG_SSB_SDIOHOST is not set
1587# CONFIG_SSB_SILENT is not set
1588# CONFIG_SSB_DEBUG is not set
1589
1590#
1591# Multifunction device drivers
1592#
1593CONFIG_MFD_CORE=y
1594# CONFIG_MFD_SM501 is not set
1595# CONFIG_MFD_ASIC3 is not set
1596# CONFIG_HTC_EGPIO is not set
1597# CONFIG_HTC_PASIC3 is not set
1598# CONFIG_TPS65010 is not set
1599CONFIG_TWL4030_CORE=y
1600# CONFIG_TWL4030_POWER is not set
1601CONFIG_TWL4030_CODEC=y
1602CONFIG_TWL4030_MADC=y
1603# CONFIG_MFD_TMIO is not set
1604# CONFIG_MFD_T7L66XB is not set
1605# CONFIG_MFD_TC6387XB is not set
1606# CONFIG_MFD_TC6393XB is not set
1607# CONFIG_PMIC_DA903X is not set
1608# CONFIG_PMIC_ADP5520 is not set
1609# CONFIG_MFD_WM8400 is not set
1610# CONFIG_MFD_WM831X is not set
1611# CONFIG_MFD_WM8350_I2C is not set
1612# CONFIG_MFD_PCF50633 is not set
1613# CONFIG_MFD_MC13783 is not set
1614# CONFIG_AB3100_CORE is not set
1615# CONFIG_EZX_PCAP is not set
1616# CONFIG_MFD_88PM8607 is not set
1617# CONFIG_AB4500_CORE is not set
1618CONFIG_REGULATOR=y
1619# CONFIG_REGULATOR_DEBUG is not set
1620# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
1621# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
1622# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
1623# CONFIG_REGULATOR_BQ24022 is not set
1624# CONFIG_REGULATOR_MAX1586 is not set
1625CONFIG_REGULATOR_TWL4030=y
1626# CONFIG_REGULATOR_LP3971 is not set
1627# CONFIG_REGULATOR_TPS65023 is not set
1628# CONFIG_REGULATOR_TPS6507X is not set
1629CONFIG_MEDIA_SUPPORT=y
1630
1631#
1632# Multimedia core support
1633#
1634CONFIG_VIDEO_DEV=m
1635CONFIG_VIDEO_V4L2_COMMON=m
1636CONFIG_VIDEO_ALLOW_V4L1=y
1637CONFIG_VIDEO_V4L1_COMPAT=y
1638CONFIG_DVB_CORE=m
1639CONFIG_VIDEO_MEDIA=m
1640
1641#
1642# Multimedia drivers
1643#
1644CONFIG_MEDIA_ATTACH=y
1645CONFIG_MEDIA_TUNER=m
1646CONFIG_MEDIA_TUNER_CUSTOMISE=y
1647CONFIG_MEDIA_TUNER_SIMPLE=m
1648CONFIG_MEDIA_TUNER_TDA8290=m
1649CONFIG_MEDIA_TUNER_TDA827X=m
1650CONFIG_MEDIA_TUNER_TDA18271=m
1651CONFIG_MEDIA_TUNER_TDA9887=m
1652CONFIG_MEDIA_TUNER_TEA5761=m
1653CONFIG_MEDIA_TUNER_TEA5767=m
1654CONFIG_MEDIA_TUNER_MT20XX=m
1655CONFIG_MEDIA_TUNER_MT2060=m
1656CONFIG_MEDIA_TUNER_MT2266=m
1657CONFIG_MEDIA_TUNER_MT2131=m
1658CONFIG_MEDIA_TUNER_QT1010=m
1659CONFIG_MEDIA_TUNER_XC2028=m
1660CONFIG_MEDIA_TUNER_XC5000=m
1661CONFIG_MEDIA_TUNER_MXL5005S=m
1662CONFIG_MEDIA_TUNER_MXL5007T=m
1663CONFIG_MEDIA_TUNER_MC44S803=m
1664CONFIG_MEDIA_TUNER_MAX2165=m
1665CONFIG_VIDEO_V4L2=m
1666CONFIG_VIDEO_V4L1=m
1667CONFIG_VIDEOBUF_GEN=m
1668CONFIG_VIDEOBUF_DMA_SG=m
1669CONFIG_VIDEOBUF_VMALLOC=m
1670CONFIG_VIDEOBUF_DVB=m
1671CONFIG_VIDEO_IR=m
1672CONFIG_VIDEO_TVEEPROM=m
1673CONFIG_VIDEO_TUNER=m
1674CONFIG_VIDEO_CAPTURE_DRIVERS=y
1675# CONFIG_VIDEO_ADV_DEBUG is not set
1676# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
1677# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
1678CONFIG_VIDEO_IR_I2C=m
1679
1680#
1681# Encoders/decoders and other helper chips
1682#
1683
1684#
1685# Audio decoders
1686#
1687CONFIG_VIDEO_TVAUDIO=m
1688CONFIG_VIDEO_TDA7432=m
1689CONFIG_VIDEO_TDA9840=m
1690CONFIG_VIDEO_TDA9875=m
1691CONFIG_VIDEO_TEA6415C=m
1692CONFIG_VIDEO_TEA6420=m
1693CONFIG_VIDEO_MSP3400=m
1694CONFIG_VIDEO_CS5345=m
1695CONFIG_VIDEO_CS53L32A=m
1696CONFIG_VIDEO_M52790=m
1697CONFIG_VIDEO_TLV320AIC23B=m
1698CONFIG_VIDEO_WM8775=m
1699CONFIG_VIDEO_WM8739=m
1700CONFIG_VIDEO_VP27SMPX=m
1701
1702#
1703# RDS decoders
1704#
1705CONFIG_VIDEO_SAA6588=m
1706
1707#
1708# Video decoders
1709#
1710CONFIG_VIDEO_ADV7180=m
1711CONFIG_VIDEO_BT819=m
1712CONFIG_VIDEO_BT856=m
1713CONFIG_VIDEO_BT866=m
1714CONFIG_VIDEO_KS0127=m
1715# CONFIG_VIDEO_OV7670 is not set
1716CONFIG_VIDEO_MT9V011=m
1717CONFIG_VIDEO_TCM825X=m
1718CONFIG_VIDEO_MT9P012=m
1719CONFIG_VIDEO_DW9710=m
1720# CONFIG_VIDEO_OV3640 is not set
1721CONFIG_VIDEO_IMX046=m
1722CONFIG_VIDEO_LV8093=m
1723CONFIG_VIDEO_SAA7110=m
1724CONFIG_VIDEO_SAA711X=m
1725CONFIG_VIDEO_SAA717X=m
1726CONFIG_VIDEO_SAA7191=m
1727CONFIG_VIDEO_TVP514X=m
1728CONFIG_VIDEO_TVP5150=m
1729CONFIG_VIDEO_VPX3220=m
1730
1731#
1732# Video and audio decoders
1733#
1734CONFIG_VIDEO_CX25840=m
1735
1736#
1737# MPEG video encoders
1738#
1739CONFIG_VIDEO_CX2341X=m
1740
1741#
1742# Video encoders
1743#
1744CONFIG_VIDEO_SAA7127=m
1745CONFIG_VIDEO_SAA7185=m
1746CONFIG_VIDEO_ADV7170=m
1747CONFIG_VIDEO_ADV7175=m
1748CONFIG_VIDEO_THS7303=m
1749CONFIG_VIDEO_ADV7343=m
1750
1751#
1752# Video improvement chips
1753#
1754CONFIG_VIDEO_UPD64031A=m
1755CONFIG_VIDEO_UPD64083=m
1756CONFIG_VIDEO_VIVI=m
1757# CONFIG_VIDEO_CPIA is not set
1758# CONFIG_VIDEO_CPIA2 is not set
1759# CONFIG_VIDEO_SAA5246A is not set
1760# CONFIG_VIDEO_SAA5249 is not set
1761# CONFIG_VIDEO_AU0828 is not set
1762CONFIG_TI_MEDIA=m
1763CONFIG_VIDEO_VPSS_SYSTEM=m
1764# CONFIG_VIDEO_VPFE_CAPTURE is not set
1765CONFIG_VIDEO_OMAP2_VOUT=m
1766# CONFIG_VIDEO_OMAP3 is not set
1767# CONFIG_VIDEO_OMAP34XX_ISP_PREVIEWER is not set
1768# CONFIG_VIDEO_OMAP34XX_ISP_RESIZER is not set
1769# CONFIG_SOC_CAMERA is not set
1770CONFIG_V4L_USB_DRIVERS=y
1771CONFIG_USB_VIDEO_CLASS=m
1772CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
1773CONFIG_USB_GSPCA=m
1774# CONFIG_USB_M5602 is not set
1775# CONFIG_USB_STV06XX is not set
1776# CONFIG_USB_GL860 is not set
1777# CONFIG_USB_GSPCA_CONEX is not set
1778# CONFIG_USB_GSPCA_ETOMS is not set
1779# CONFIG_USB_GSPCA_FINEPIX is not set
1780# CONFIG_USB_GSPCA_JEILINJ is not set
1781# CONFIG_USB_GSPCA_MARS is not set
1782# CONFIG_USB_GSPCA_MR97310A is not set
1783# CONFIG_USB_GSPCA_OV519 is not set
1784# CONFIG_USB_GSPCA_OV534 is not set
1785# CONFIG_USB_GSPCA_PAC207 is not set
1786# CONFIG_USB_GSPCA_PAC7302 is not set
1787# CONFIG_USB_GSPCA_PAC7311 is not set
1788# CONFIG_USB_GSPCA_SN9C20X is not set
1789# CONFIG_USB_GSPCA_SONIXB is not set
1790# CONFIG_USB_GSPCA_SONIXJ is not set
1791# CONFIG_USB_GSPCA_SPCA500 is not set
1792# CONFIG_USB_GSPCA_SPCA501 is not set
1793# CONFIG_USB_GSPCA_SPCA505 is not set
1794# CONFIG_USB_GSPCA_SPCA506 is not set
1795# CONFIG_USB_GSPCA_SPCA508 is not set
1796# CONFIG_USB_GSPCA_SPCA561 is not set
1797# CONFIG_USB_GSPCA_SQ905 is not set
1798# CONFIG_USB_GSPCA_SQ905C is not set
1799# CONFIG_USB_GSPCA_STK014 is not set
1800# CONFIG_USB_GSPCA_STV0680 is not set
1801# CONFIG_USB_GSPCA_SUNPLUS is not set
1802# CONFIG_USB_GSPCA_T613 is not set
1803# CONFIG_USB_GSPCA_TV8532 is not set
1804# CONFIG_USB_GSPCA_VC032X is not set
1805# CONFIG_USB_GSPCA_ZC3XX is not set
1806CONFIG_VIDEO_PVRUSB2=m
1807CONFIG_VIDEO_PVRUSB2_SYSFS=y
1808CONFIG_VIDEO_PVRUSB2_DVB=y
1809# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
1810CONFIG_VIDEO_HDPVR=m
1811CONFIG_VIDEO_EM28XX=m
1812CONFIG_VIDEO_EM28XX_ALSA=m
1813CONFIG_VIDEO_EM28XX_DVB=m
1814CONFIG_VIDEO_CX231XX=m
1815CONFIG_VIDEO_CX231XX_ALSA=m
1816CONFIG_VIDEO_CX231XX_DVB=m
1817CONFIG_VIDEO_USBVISION=m
1818CONFIG_VIDEO_USBVIDEO=m
1819CONFIG_USB_VICAM=m
1820CONFIG_USB_IBMCAM=m
1821CONFIG_USB_KONICAWC=m
1822CONFIG_USB_QUICKCAM_MESSENGER=m
1823CONFIG_USB_ET61X251=m
1824CONFIG_VIDEO_OVCAMCHIP=m
1825CONFIG_USB_W9968CF=m
1826CONFIG_USB_OV511=m
1827CONFIG_USB_SE401=m
1828CONFIG_USB_SN9C102=m
1829CONFIG_USB_STV680=m
1830CONFIG_USB_ZC0301=m
1831CONFIG_USB_PWC=m
1832# CONFIG_USB_PWC_DEBUG is not set
1833CONFIG_USB_PWC_INPUT_EVDEV=y
1834CONFIG_USB_ZR364XX=m
1835CONFIG_USB_STKWEBCAM=m
1836CONFIG_USB_S2255=m
1837CONFIG_RADIO_ADAPTERS=y
1838# CONFIG_I2C_SI4713 is not set
1839# CONFIG_RADIO_SI4713 is not set
1840# CONFIG_USB_DSBR is not set
1841# CONFIG_RADIO_SI470X is not set
1842# CONFIG_USB_MR800 is not set
1843# CONFIG_RADIO_TEA5764 is not set
1844# CONFIG_RADIO_TEF6862 is not set
1845CONFIG_DVB_MAX_ADAPTERS=8
1846CONFIG_DVB_DYNAMIC_MINORS=y
1847CONFIG_DVB_CAPTURE_DRIVERS=y
1848# CONFIG_TTPCI_EEPROM is not set
1849
1850#
1851# Supported USB Adapters
1852#
1853CONFIG_DVB_USB=m
1854# CONFIG_DVB_USB_DEBUG is not set
1855CONFIG_DVB_USB_A800=m
1856CONFIG_DVB_USB_DIBUSB_MB=m
1857# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
1858CONFIG_DVB_USB_DIBUSB_MC=m
1859CONFIG_DVB_USB_DIB0700=m
1860CONFIG_DVB_USB_UMT_010=m
1861CONFIG_DVB_USB_CXUSB=m
1862CONFIG_DVB_USB_M920X=m
1863CONFIG_DVB_USB_GL861=m
1864CONFIG_DVB_USB_AU6610=m
1865CONFIG_DVB_USB_DIGITV=m
1866CONFIG_DVB_USB_VP7045=m
1867CONFIG_DVB_USB_VP702X=m
1868CONFIG_DVB_USB_GP8PSK=m
1869CONFIG_DVB_USB_NOVA_T_USB2=m
1870CONFIG_DVB_USB_TTUSB2=m
1871CONFIG_DVB_USB_DTT200U=m
1872CONFIG_DVB_USB_OPERA1=m
1873CONFIG_DVB_USB_AF9005=m
1874CONFIG_DVB_USB_AF9005_REMOTE=m
1875CONFIG_DVB_USB_DW2102=m
1876CONFIG_DVB_USB_CINERGY_T2=m
1877CONFIG_DVB_USB_ANYSEE=m
1878CONFIG_DVB_USB_DTV5100=m
1879CONFIG_DVB_USB_AF9015=m
1880CONFIG_DVB_USB_CE6230=m
1881CONFIG_DVB_USB_FRIIO=m
1882CONFIG_DVB_USB_EC168=m
1883CONFIG_SMS_SIANO_MDTV=m
1884
1885#
1886# Siano module components
1887#
1888# CONFIG_SMS_USB_DRV is not set
1889# CONFIG_SMS_SDIO_DRV is not set
1890
1891#
1892# Supported FlexCopII (B2C2) Adapters
1893#
1894CONFIG_DVB_B2C2_FLEXCOP=m
1895CONFIG_DVB_B2C2_FLEXCOP_USB=m
1896# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
1897
1898#
1899# Supported DVB Frontends
1900#
1901# CONFIG_DVB_FE_CUSTOMISE is not set
1902CONFIG_DVB_CX24123=m
1903CONFIG_DVB_MT312=m
1904CONFIG_DVB_ZL10039=m
1905CONFIG_DVB_S5H1420=m
1906CONFIG_DVB_STV0288=m
1907CONFIG_DVB_STB6000=m
1908CONFIG_DVB_STV0299=m
1909CONFIG_DVB_TDA10086=m
1910CONFIG_DVB_TUNER_ITD1000=m
1911CONFIG_DVB_TUNER_CX24113=m
1912CONFIG_DVB_TDA826X=m
1913CONFIG_DVB_CX24116=m
1914CONFIG_DVB_SI21XX=m
1915CONFIG_DVB_CX22702=m
1916CONFIG_DVB_TDA1004X=m
1917CONFIG_DVB_NXT6000=m
1918CONFIG_DVB_MT352=m
1919CONFIG_DVB_ZL10353=m
1920CONFIG_DVB_DIB3000MB=m
1921CONFIG_DVB_DIB3000MC=m
1922CONFIG_DVB_DIB7000M=m
1923CONFIG_DVB_DIB7000P=m
1924CONFIG_DVB_TDA10048=m
1925CONFIG_DVB_AF9013=m
1926CONFIG_DVB_EC100=m
1927CONFIG_DVB_TDA10021=m
1928CONFIG_DVB_TDA10023=m
1929CONFIG_DVB_STV0297=m
1930CONFIG_DVB_NXT200X=m
1931CONFIG_DVB_BCM3510=m
1932CONFIG_DVB_LGDT330X=m
1933CONFIG_DVB_LGDT3305=m
1934CONFIG_DVB_S5H1409=m
1935CONFIG_DVB_S5H1411=m
1936CONFIG_DVB_DIB8000=m
1937CONFIG_DVB_PLL=m
1938CONFIG_DVB_TUNER_DIB0070=m
1939CONFIG_DVB_LNBP21=m
1940CONFIG_DVB_ISL6421=m
1941CONFIG_DVB_LGS8GL5=m
1942CONFIG_DAB=y
1943CONFIG_USB_DABUSB=m
1944
1945#
1946# Graphics support
1947#
1948# CONFIG_VGASTATE is not set
1949# CONFIG_VIDEO_OUTPUT_CONTROL is not set
1950CONFIG_FB=y
1951# CONFIG_FIRMWARE_EDID is not set
1952# CONFIG_FB_DDC is not set
1953# CONFIG_FB_BOOT_VESA_SUPPORT is not set
1954CONFIG_FB_CFB_FILLRECT=y
1955CONFIG_FB_CFB_COPYAREA=y
1956CONFIG_FB_CFB_IMAGEBLIT=y
1957# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
1958# CONFIG_FB_SYS_FILLRECT is not set
1959# CONFIG_FB_SYS_COPYAREA is not set
1960# CONFIG_FB_SYS_IMAGEBLIT is not set
1961# CONFIG_FB_FOREIGN_ENDIAN is not set
1962# CONFIG_FB_SYS_FOPS is not set
1963# CONFIG_FB_SVGALIB is not set
1964# CONFIG_FB_MACMODES is not set
1965# CONFIG_FB_BACKLIGHT is not set
1966# CONFIG_FB_MODE_HELPERS is not set
1967# CONFIG_FB_TILEBLITTING is not set
1968
1969#
1970# Frame buffer hardware drivers
1971#
1972# CONFIG_FB_S1D13XXX is not set
1973# CONFIG_FB_TMIO is not set
1974# CONFIG_FB_VIRTUAL is not set
1975# CONFIG_FB_METRONOME is not set
1976# CONFIG_FB_MB862XX is not set
1977# CONFIG_FB_BROADSHEET is not set
1978# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
1979CONFIG_OMAP2_VRAM=y
1980CONFIG_OMAP2_VRFB=y
1981CONFIG_OMAP2_DSS=y
1982CONFIG_OMAP2_VRAM_SIZE=18
1983CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y
1984# CONFIG_OMAP2_DSS_RFBI is not set
1985CONFIG_OMAP2_DSS_VENC=y
1986CONFIG_OMAP2_VENC_OUT_TYPE_SVIDEO=y
1987# CONFIG_OMAP2_VENC_OUT_TYPE_COMPOSITE is not set
1988# CONFIG_OMAP2_DSS_SDI is not set
1989CONFIG_OMAP2_DSS_DSI=y
1990CONFIG_OMAP2_DSS_USE_DSI_PLL=y
1991# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
1992CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
1993CONFIG_FB_OMAP2=y
1994CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
1995# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
1996CONFIG_FB_OMAP2_NUM_FBS=3
1997
1998#
1999# OMAP2/3 Display Device Drivers
2000#
2001CONFIG_PANEL_GENERIC=y
2002# CONFIG_PANEL_LGPHILIPS_LB035Q02 is not set
2003# CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C is not set
2004CONFIG_PANEL_SHARP_LS037V7DW01=y
2005CONFIG_PANEL_SHARP_LQ043T1DG01=y
2006# CONFIG_PANEL_TAAL is not set
2007CONFIG_BACKLIGHT_LCD_SUPPORT=y
2008CONFIG_LCD_CLASS_DEVICE=y
2009# CONFIG_LCD_LMS283GF05 is not set
2010# CONFIG_LCD_LTV350QV is not set
2011# CONFIG_LCD_ILI9320 is not set
2012# CONFIG_LCD_TDO24M is not set
2013# CONFIG_LCD_VGG2432A4 is not set
2014CONFIG_LCD_PLATFORM=y
2015CONFIG_BACKLIGHT_CLASS_DEVICE=y
2016CONFIG_BACKLIGHT_GENERIC=y
2017
2018#
2019# Display device support
2020#
2021CONFIG_DISPLAY_SUPPORT=y
2022
2023#
2024# Display hardware drivers
2025#
2026
2027#
2028# Console display driver support
2029#
2030# CONFIG_VGA_CONSOLE is not set
2031CONFIG_DUMMY_CONSOLE=y
2032CONFIG_FRAMEBUFFER_CONSOLE=y
2033# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
2034CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
2035# CONFIG_FONTS is not set
2036CONFIG_FONT_8x8=y
2037CONFIG_FONT_8x16=y
2038# CONFIG_LOGO is not set
2039CONFIG_SOUND=y
2040CONFIG_SOUND_OSS_CORE=y
2041CONFIG_SOUND_OSS_CORE_PRECLAIM=y
2042CONFIG_SND=y
2043CONFIG_SND_TIMER=y
2044CONFIG_SND_PCM=y
2045CONFIG_SND_HWDEP=m
2046CONFIG_SND_RAWMIDI=m
2047CONFIG_SND_JACK=y
2048CONFIG_SND_SEQUENCER=m
2049# CONFIG_SND_SEQ_DUMMY is not set
2050CONFIG_SND_OSSEMUL=y
2051CONFIG_SND_MIXER_OSS=y
2052# CONFIG_SND_PCM_OSS is not set
2053CONFIG_SND_SEQUENCER_OSS=y
2054CONFIG_SND_HRTIMER=m
2055CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
2056# CONFIG_SND_DYNAMIC_MINORS is not set
2057CONFIG_SND_SUPPORT_OLD_API=y
2058CONFIG_SND_VERBOSE_PROCFS=y
2059# CONFIG_SND_VERBOSE_PRINTK is not set
2060# CONFIG_SND_DEBUG is not set
2061CONFIG_SND_RAWMIDI_SEQ=m
2062# CONFIG_SND_OPL3_LIB_SEQ is not set
2063# CONFIG_SND_OPL4_LIB_SEQ is not set
2064# CONFIG_SND_SBAWE_SEQ is not set
2065# CONFIG_SND_EMU10K1_SEQ is not set
2066CONFIG_SND_DRIVERS=y
2067# CONFIG_SND_DUMMY is not set
2068CONFIG_SND_VIRMIDI=m
2069# CONFIG_SND_MTPAV is not set
2070# CONFIG_SND_SERIAL_U16550 is not set
2071# CONFIG_SND_MPU401 is not set
2072# CONFIG_SND_ARM is not set
2073CONFIG_SND_SPI=y
2074CONFIG_SND_USB=y
2075CONFIG_SND_USB_AUDIO=m
2076CONFIG_SND_USB_CAIAQ=m
2077CONFIG_SND_USB_CAIAQ_INPUT=y
2078CONFIG_SND_SOC=y
2079CONFIG_SND_OMAP_SOC=y
2080CONFIG_SND_OMAP_SOC_MCBSP=y
2081CONFIG_SND_OMAP_SOC_OMAP3_TOUCHBOOK=y
2082CONFIG_SND_SOC_I2C_AND_SPI=y
2083# CONFIG_SND_SOC_ALL_CODECS is not set
2084CONFIG_SND_SOC_TWL4030=y
2085# CONFIG_SOUND_PRIME is not set
2086CONFIG_HID_SUPPORT=y
2087CONFIG_HID=y
2088# CONFIG_HIDRAW is not set
2089
2090#
2091# USB Input Devices
2092#
2093CONFIG_USB_HID=y
2094# CONFIG_HID_PID is not set
2095# CONFIG_USB_HIDDEV is not set
2096
2097#
2098# Special HID drivers
2099#
2100CONFIG_HID_A4TECH=y
2101CONFIG_HID_AI=y
2102CONFIG_HID_APPLE=y
2103CONFIG_HID_BELKIN=y
2104CONFIG_HID_CHERRY=y
2105CONFIG_HID_CHICONY=y
2106CONFIG_HID_CYPRESS=y
2107# CONFIG_HID_DRAGONRISE is not set
2108CONFIG_HID_EZKEY=y
2109# CONFIG_HID_KYE is not set
2110CONFIG_HID_GYRATION=y
2111# CONFIG_HID_TWINHAN is not set
2112# CONFIG_HID_KENSINGTON is not set
2113CONFIG_HID_LOGITECH=y
2114# CONFIG_LOGITECH_FF is not set
2115# CONFIG_LOGIRUMBLEPAD2_FF is not set
2116CONFIG_HID_MICROSOFT=y
2117CONFIG_HID_MONTEREY=y
2118CONFIG_HID_NTRIG=y
2119CONFIG_HID_PANTHERLORD=y
2120# CONFIG_PANTHERLORD_FF is not set
2121CONFIG_HID_PETALYNX=y
2122CONFIG_HID_SAMSUNG=y
2123CONFIG_HID_SONY=y
2124CONFIG_HID_SUNPLUS=y
2125# CONFIG_HID_GREENASIA is not set
2126# CONFIG_HID_SMARTJOYPLUS is not set
2127CONFIG_HID_TOPSEED=y
2128# CONFIG_HID_THRUSTMASTER is not set
2129# CONFIG_HID_WACOM is not set
2130# CONFIG_HID_ZEROPLUS is not set
2131CONFIG_USB_SUPPORT=y
2132CONFIG_USB_ARCH_HAS_HCD=y
2133CONFIG_USB_ARCH_HAS_OHCI=y
2134CONFIG_USB_ARCH_HAS_EHCI=y
2135CONFIG_USB=y
2136# CONFIG_USB_DEBUG is not set
2137# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
2138
2139#
2140# Miscellaneous USB options
2141#
2142CONFIG_USB_DEVICEFS=y
2143CONFIG_USB_DEVICE_CLASS=y
2144# CONFIG_USB_DYNAMIC_MINORS is not set
2145CONFIG_USB_SUSPEND=y
2146CONFIG_USB_OTG=y
2147# CONFIG_USB_OTG_WHITELIST is not set
2148# CONFIG_USB_OTG_BLACKLIST_HUB is not set
2149CONFIG_USB_MON=y
2150# CONFIG_USB_WUSB is not set
2151# CONFIG_USB_WUSB_CBAF is not set
2152
2153#
2154# USB Host Controller Drivers
2155#
2156# CONFIG_USB_C67X00_HCD is not set
2157CONFIG_USB_EHCI_HCD=y
2158CONFIG_USB_EHCI_ROOT_HUB_TT=y
2159CONFIG_USB_EHCI_TT_NEWSCHED=y
2160CONFIG_USB_OXU210HP_HCD=y
2161# CONFIG_USB_ISP116X_HCD is not set
2162# CONFIG_USB_ISP1760_HCD is not set
2163# CONFIG_USB_ISP1362_HCD is not set
2164# CONFIG_USB_OHCI_HCD is not set
2165# CONFIG_USB_U132_HCD is not set
2166# CONFIG_USB_SL811_HCD is not set
2167# CONFIG_USB_R8A66597_HCD is not set
2168# CONFIG_USB_HWA_HCD is not set
2169CONFIG_USB_MUSB_HDRC=y
2170CONFIG_USB_MUSB_SOC=y
2171
2172#
2173# OMAP 343x high speed USB support
2174#
2175# CONFIG_USB_MUSB_HOST is not set
2176# CONFIG_USB_MUSB_PERIPHERAL is not set
2177CONFIG_USB_MUSB_OTG=y
2178CONFIG_USB_GADGET_MUSB_HDRC=y
2179CONFIG_USB_MUSB_HDRC_HCD=y
2180# CONFIG_MUSB_PIO_ONLY is not set
2181CONFIG_USB_INVENTRA_DMA=y
2182CONFIG_MUSB_USE_SYSTEM_DMA_RX=y
2183# CONFIG_USB_TI_CPPI_DMA is not set
2184# CONFIG_USB_TI_CPPI41_DMA is not set
2185# CONFIG_USB_MUSB_DEBUG is not set
2186
2187#
2188# USB Device Class drivers
2189#
2190CONFIG_USB_ACM=m
2191CONFIG_USB_PRINTER=m
2192CONFIG_USB_WDM=m
2193CONFIG_USB_TMC=m
2194
2195#
2196# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
2197#
2198
2199#
2200# also be needed; see USB_STORAGE Help for more info
2201#
2202CONFIG_USB_STORAGE=y
2203# CONFIG_USB_STORAGE_DEBUG is not set
2204# CONFIG_USB_STORAGE_DATAFAB is not set
2205# CONFIG_USB_STORAGE_FREECOM is not set
2206# CONFIG_USB_STORAGE_ISD200 is not set
2207# CONFIG_USB_STORAGE_USBAT is not set
2208# CONFIG_USB_STORAGE_SDDR09 is not set
2209# CONFIG_USB_STORAGE_SDDR55 is not set
2210# CONFIG_USB_STORAGE_JUMPSHOT is not set
2211# CONFIG_USB_STORAGE_ALAUDA is not set
2212# CONFIG_USB_STORAGE_ONETOUCH is not set
2213# CONFIG_USB_STORAGE_KARMA is not set
2214# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
2215# CONFIG_USB_LIBUSUAL is not set
2216
2217#
2218# USB Imaging devices
2219#
2220# CONFIG_USB_MDC800 is not set
2221# CONFIG_USB_MICROTEK is not set
2222
2223#
2224# USB port drivers
2225#
2226CONFIG_USB_SERIAL=m
2227CONFIG_USB_EZUSB=y
2228CONFIG_USB_SERIAL_GENERIC=y
2229CONFIG_USB_SERIAL_AIRCABLE=m
2230CONFIG_USB_SERIAL_ARK3116=m
2231CONFIG_USB_SERIAL_BELKIN=m
2232CONFIG_USB_SERIAL_CH341=m
2233CONFIG_USB_SERIAL_WHITEHEAT=m
2234CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
2235# CONFIG_USB_SERIAL_CP210X is not set
2236CONFIG_USB_SERIAL_CYPRESS_M8=m
2237CONFIG_USB_SERIAL_EMPEG=m
2238CONFIG_USB_SERIAL_FTDI_SIO=m
2239CONFIG_USB_SERIAL_FUNSOFT=m
2240CONFIG_USB_SERIAL_VISOR=m
2241CONFIG_USB_SERIAL_IPAQ=m
2242CONFIG_USB_SERIAL_IR=m
2243CONFIG_USB_SERIAL_EDGEPORT=m
2244CONFIG_USB_SERIAL_EDGEPORT_TI=m
2245CONFIG_USB_SERIAL_GARMIN=m
2246CONFIG_USB_SERIAL_IPW=m
2247CONFIG_USB_SERIAL_IUU=m
2248CONFIG_USB_SERIAL_KEYSPAN_PDA=m
2249CONFIG_USB_SERIAL_KEYSPAN=m
2250CONFIG_USB_SERIAL_KEYSPAN_MPR=y
2251CONFIG_USB_SERIAL_KEYSPAN_USA28=y
2252CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
2253CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
2254CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
2255CONFIG_USB_SERIAL_KEYSPAN_USA19=y
2256CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
2257CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
2258CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
2259CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
2260CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
2261CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
2262CONFIG_USB_SERIAL_KLSI=m
2263CONFIG_USB_SERIAL_KOBIL_SCT=m
2264CONFIG_USB_SERIAL_MCT_U232=m
2265CONFIG_USB_SERIAL_MOS7720=m
2266CONFIG_USB_SERIAL_MOS7840=m
2267CONFIG_USB_SERIAL_MOTOROLA=m
2268CONFIG_USB_SERIAL_NAVMAN=m
2269CONFIG_USB_SERIAL_PL2303=m
2270CONFIG_USB_SERIAL_OTI6858=m
2271# CONFIG_USB_SERIAL_QUALCOMM is not set
2272CONFIG_USB_SERIAL_SPCP8X5=m
2273CONFIG_USB_SERIAL_HP4X=m
2274CONFIG_USB_SERIAL_SAFE=m
2275# CONFIG_USB_SERIAL_SAFE_PADDED is not set
2276CONFIG_USB_SERIAL_SIEMENS_MPI=m
2277CONFIG_USB_SERIAL_SIERRAWIRELESS=m
2278# CONFIG_USB_SERIAL_SYMBOL is not set
2279CONFIG_USB_SERIAL_TI=m
2280CONFIG_USB_SERIAL_CYBERJACK=m
2281CONFIG_USB_SERIAL_XIRCOM=m
2282CONFIG_USB_SERIAL_OPTION=m
2283CONFIG_USB_SERIAL_OMNINET=m
2284CONFIG_USB_SERIAL_OPTICON=m
2285CONFIG_USB_SERIAL_DEBUG=m
2286
2287#
2288# USB Miscellaneous drivers
2289#
2290CONFIG_USB_EMI62=m
2291CONFIG_USB_EMI26=m
2292# CONFIG_USB_ADUTUX is not set
2293# CONFIG_USB_SEVSEG is not set
2294# CONFIG_USB_RIO500 is not set
2295CONFIG_USB_LEGOTOWER=m
2296CONFIG_USB_LCD=m
2297CONFIG_USB_BERRY_CHARGE=m
2298CONFIG_USB_LED=m
2299CONFIG_USB_CYPRESS_CY7C63=m
2300CONFIG_USB_CYTHERM=m
2301CONFIG_USB_IDMOUSE=m
2302CONFIG_USB_FTDI_ELAN=m
2303# CONFIG_USB_APPLEDISPLAY is not set
2304CONFIG_USB_SISUSBVGA=m
2305CONFIG_USB_SISUSBVGA_CON=y
2306CONFIG_USB_LD=m
2307CONFIG_USB_TRANCEVIBRATOR=m
2308# CONFIG_USB_IOWARRIOR is not set
2309CONFIG_USB_TEST=m
2310# CONFIG_USB_ISIGHTFW is not set
2311CONFIG_USB_VST=m
2312CONFIG_USB_ATM=m
2313CONFIG_USB_SPEEDTOUCH=m
2314CONFIG_USB_CXACRU=m
2315CONFIG_USB_UEAGLEATM=m
2316CONFIG_USB_XUSBATM=m
2317CONFIG_USB_GADGET=m
2318# CONFIG_USB_GADGET_DEBUG is not set
2319# CONFIG_USB_GADGET_DEBUG_FILES is not set
2320CONFIG_USB_GADGET_DEBUG_FS=y
2321CONFIG_USB_GADGET_VBUS_DRAW=2
2322CONFIG_USB_GADGET_SELECTED=y
2323# CONFIG_USB_GADGET_AT91 is not set
2324# CONFIG_USB_GADGET_ATMEL_USBA is not set
2325# CONFIG_USB_GADGET_FSL_USB2 is not set
2326# CONFIG_USB_GADGET_LH7A40X is not set
2327# CONFIG_USB_GADGET_OMAP is not set
2328# CONFIG_USB_GADGET_PXA25X is not set
2329# CONFIG_USB_GADGET_R8A66597 is not set
2330# CONFIG_USB_GADGET_PXA27X is not set
2331# CONFIG_USB_GADGET_S3C_HSOTG is not set
2332# CONFIG_USB_GADGET_IMX is not set
2333# CONFIG_USB_GADGET_S3C2410 is not set
2334# CONFIG_USB_GADGET_M66592 is not set
2335# CONFIG_USB_GADGET_AMD5536UDC is not set
2336# CONFIG_USB_GADGET_FSL_QE is not set
2337# CONFIG_USB_GADGET_CI13XXX is not set
2338# CONFIG_USB_GADGET_NET2280 is not set
2339# CONFIG_USB_GADGET_GOKU is not set
2340# CONFIG_USB_GADGET_LANGWELL is not set
2341# CONFIG_USB_GADGET_DUMMY_HCD is not set
2342CONFIG_USB_GADGET_DUALSPEED=y
2343CONFIG_USB_ZERO=m
2344CONFIG_USB_ZERO_HNPTEST=y
2345# CONFIG_USB_AUDIO is not set
2346CONFIG_USB_ETH=m
2347CONFIG_USB_ETH_RNDIS=y
2348# CONFIG_USB_ETH_EEM is not set
2349CONFIG_USB_GADGETFS=m
2350CONFIG_USB_FILE_STORAGE=m
2351# CONFIG_USB_FILE_STORAGE_TEST is not set
2352# CONFIG_USB_MASS_STORAGE is not set
2353CONFIG_USB_G_SERIAL=m
2354CONFIG_USB_MIDI_GADGET=m
2355CONFIG_USB_G_PRINTER=m
2356CONFIG_USB_CDC_COMPOSITE=m
2357# CONFIG_USB_G_MULTI is not set
2358
2359#
2360# OTG and related infrastructure
2361#
2362CONFIG_USB_OTG_UTILS=y
2363CONFIG_USB_GPIO_VBUS=y
2364# CONFIG_ISP1301_OMAP is not set
2365# CONFIG_USB_ULPI is not set
2366CONFIG_TWL4030_USB=y
2367CONFIG_NOP_USB_XCEIV=y
2368CONFIG_MMC=y
2369# CONFIG_MMC_DEBUG is not set
2370CONFIG_MMC_UNSAFE_RESUME=y
2371
2372#
2373# MMC/SD/SDIO Card Drivers
2374#
2375CONFIG_MMC_BLOCK=y
2376CONFIG_MMC_BLOCK_BOUNCE=y
2377CONFIG_SDIO_UART=y
2378# CONFIG_MMC_TEST is not set
2379
2380#
2381# MMC/SD/SDIO Host Controller Drivers
2382#
2383# CONFIG_MMC_SDHCI is not set
2384# CONFIG_MMC_OMAP is not set
2385CONFIG_MMC_OMAP_HS=y
2386# CONFIG_MMC_AT91 is not set
2387# CONFIG_MMC_ATMELMCI is not set
2388CONFIG_MMC_SPI=m
2389# CONFIG_MEMSTICK is not set
2390CONFIG_NEW_LEDS=y
2391CONFIG_LEDS_CLASS=y
2392
2393#
2394# LED drivers
2395#
2396# CONFIG_LEDS_PCA9532 is not set
2397CONFIG_LEDS_GPIO=y
2398CONFIG_LEDS_GPIO_PLATFORM=y
2399# CONFIG_LEDS_LP3944 is not set
2400# CONFIG_LEDS_PCA955X is not set
2401# CONFIG_LEDS_DAC124S085 is not set
2402# CONFIG_LEDS_BD2802 is not set
2403
2404#
2405# LED Triggers
2406#
2407CONFIG_LEDS_TRIGGERS=y
2408CONFIG_LEDS_TRIGGER_TIMER=m
2409CONFIG_LEDS_TRIGGER_HEARTBEAT=y
2410CONFIG_LEDS_TRIGGER_BACKLIGHT=m
2411# CONFIG_LEDS_TRIGGER_GPIO is not set
2412CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
2413
2414#
2415# iptables trigger is under Netfilter config (LED target)
2416#
2417# CONFIG_ACCESSIBILITY is not set
2418CONFIG_RTC_LIB=y
2419CONFIG_RTC_CLASS=y
2420CONFIG_RTC_HCTOSYS=y
2421CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
2422# CONFIG_RTC_DEBUG is not set
2423
2424#
2425# RTC interfaces
2426#
2427CONFIG_RTC_INTF_SYSFS=y
2428CONFIG_RTC_INTF_PROC=y
2429CONFIG_RTC_INTF_DEV=y
2430# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
2431# CONFIG_RTC_DRV_TEST is not set
2432
2433#
2434# I2C RTC drivers
2435#
2436CONFIG_RTC_DRV_DS1307=y
2437# CONFIG_RTC_DRV_DS1374 is not set
2438# CONFIG_RTC_DRV_DS1672 is not set
2439# CONFIG_RTC_DRV_MAX6900 is not set
2440# CONFIG_RTC_DRV_RS5C372 is not set
2441# CONFIG_RTC_DRV_ISL1208 is not set
2442# CONFIG_RTC_DRV_X1205 is not set
2443# CONFIG_RTC_DRV_PCF8563 is not set
2444# CONFIG_RTC_DRV_PCF8583 is not set
2445# CONFIG_RTC_DRV_M41T80 is not set
2446CONFIG_RTC_DRV_TWL4030=y
2447# CONFIG_RTC_DRV_S35390A is not set
2448# CONFIG_RTC_DRV_FM3130 is not set
2449# CONFIG_RTC_DRV_RX8581 is not set
2450# CONFIG_RTC_DRV_RX8025 is not set
2451
2452#
2453# SPI RTC drivers
2454#
2455# CONFIG_RTC_DRV_M41T94 is not set
2456# CONFIG_RTC_DRV_DS1305 is not set
2457# CONFIG_RTC_DRV_DS1390 is not set
2458# CONFIG_RTC_DRV_MAX6902 is not set
2459# CONFIG_RTC_DRV_R9701 is not set
2460# CONFIG_RTC_DRV_RS5C348 is not set
2461# CONFIG_RTC_DRV_DS3234 is not set
2462# CONFIG_RTC_DRV_PCF2123 is not set
2463
2464#
2465# Platform RTC drivers
2466#
2467# CONFIG_RTC_DRV_CMOS is not set
2468# CONFIG_RTC_DRV_DS1286 is not set
2469# CONFIG_RTC_DRV_DS1511 is not set
2470# CONFIG_RTC_DRV_DS1553 is not set
2471# CONFIG_RTC_DRV_DS1742 is not set
2472# CONFIG_RTC_DRV_STK17TA8 is not set
2473# CONFIG_RTC_DRV_M48T86 is not set
2474# CONFIG_RTC_DRV_M48T35 is not set
2475# CONFIG_RTC_DRV_M48T59 is not set
2476# CONFIG_RTC_DRV_MSM6242 is not set
2477# CONFIG_RTC_DRV_BQ4802 is not set
2478# CONFIG_RTC_DRV_RP5C01 is not set
2479# CONFIG_RTC_DRV_V3020 is not set
2480
2481#
2482# on-CPU RTC drivers
2483#
2484# CONFIG_DMADEVICES is not set
2485# CONFIG_AUXDISPLAY is not set
2486CONFIG_UIO=m
2487CONFIG_UIO_PDRV=m
2488CONFIG_UIO_PDRV_GENIRQ=m
2489# CONFIG_UIO_SMX is not set
2490# CONFIG_UIO_SERCOS3 is not set
2491
2492#
2493# TI VLYNQ
2494#
2495CONFIG_STAGING=y
2496# CONFIG_STAGING_EXCLUDE_BUILD is not set
2497# CONFIG_USB_IP_COMMON is not set
2498CONFIG_W35UND=m
2499CONFIG_PRISM2_USB=m
2500# CONFIG_ECHO is not set
2501CONFIG_OTUS=m
2502# CONFIG_COMEDI is not set
2503# CONFIG_ASUS_OLED is not set
2504# CONFIG_INPUT_MIMIO is not set
2505# CONFIG_TRANZPORT is not set
2506
2507#
2508# Qualcomm MSM Camera And Video
2509#
2510
2511#
2512# Camera Sensor Selection
2513#
2514# CONFIG_INPUT_GPIO is not set
2515# CONFIG_DST is not set
2516# CONFIG_POHMELFS is not set
2517# CONFIG_PLAN9AUTH is not set
2518# CONFIG_LINE6_USB is not set
2519# CONFIG_USB_SERIAL_QUATECH2 is not set
2520# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
2521# CONFIG_VT6656 is not set
2522# CONFIG_FB_UDL is not set
2523
2524#
2525# RAR Register Driver
2526#
2527# CONFIG_RAR_REGISTER is not set
2528# CONFIG_IIO is not set
2529# CONFIG_RAMZSWAP is not set
2530# CONFIG_BATMAN_ADV is not set
2531# CONFIG_STRIP is not set
2532
2533#
2534# CBUS support
2535#
2536# CONFIG_CBUS is not set
2537
2538#
2539# File systems
2540#
2541CONFIG_FS_JOURNAL_INFO=y
2542CONFIG_EXT2_FS=y
2543# CONFIG_EXT2_FS_XATTR is not set
2544# CONFIG_EXT2_FS_XIP is not set
2545CONFIG_EXT3_FS=y
2546# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
2547# CONFIG_EXT3_FS_XATTR is not set
2548CONFIG_EXT4_FS=m
2549CONFIG_EXT4_FS_XATTR=y
2550# CONFIG_EXT4_FS_POSIX_ACL is not set
2551# CONFIG_EXT4_FS_SECURITY is not set
2552# CONFIG_EXT4_DEBUG is not set
2553CONFIG_JBD=y
2554# CONFIG_JBD_DEBUG is not set
2555CONFIG_JBD2=m
2556# CONFIG_JBD2_DEBUG is not set
2557CONFIG_FS_MBCACHE=m
2558CONFIG_REISERFS_FS=m
2559# CONFIG_REISERFS_CHECK is not set
2560CONFIG_REISERFS_PROC_INFO=y
2561CONFIG_REISERFS_FS_XATTR=y
2562# CONFIG_REISERFS_FS_POSIX_ACL is not set
2563# CONFIG_REISERFS_FS_SECURITY is not set
2564CONFIG_JFS_FS=m
2565# CONFIG_JFS_POSIX_ACL is not set
2566# CONFIG_JFS_SECURITY is not set
2567# CONFIG_JFS_DEBUG is not set
2568# CONFIG_JFS_STATISTICS is not set
2569CONFIG_FS_POSIX_ACL=y
2570CONFIG_XFS_FS=m
2571# CONFIG_XFS_QUOTA is not set
2572# CONFIG_XFS_POSIX_ACL is not set
2573# CONFIG_XFS_RT is not set
2574# CONFIG_XFS_DEBUG is not set
2575CONFIG_GFS2_FS=m
2576# CONFIG_GFS2_FS_LOCKING_DLM is not set
2577CONFIG_OCFS2_FS=m
2578CONFIG_OCFS2_FS_O2CB=m
2579CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
2580CONFIG_OCFS2_FS_STATS=y
2581CONFIG_OCFS2_DEBUG_MASKLOG=y
2582# CONFIG_OCFS2_DEBUG_FS is not set
2583# CONFIG_OCFS2_FS_POSIX_ACL is not set
2584CONFIG_BTRFS_FS=m
2585# CONFIG_BTRFS_FS_POSIX_ACL is not set
2586# CONFIG_NILFS2_FS is not set
2587CONFIG_FILE_LOCKING=y
2588CONFIG_FSNOTIFY=y
2589CONFIG_DNOTIFY=y
2590CONFIG_INOTIFY=y
2591CONFIG_INOTIFY_USER=y
2592CONFIG_QUOTA=y
2593# CONFIG_QUOTA_NETLINK_INTERFACE is not set
2594CONFIG_PRINT_QUOTA_WARNING=y
2595CONFIG_QUOTA_TREE=y
2596# CONFIG_QFMT_V1 is not set
2597CONFIG_QFMT_V2=y
2598CONFIG_QUOTACTL=y
2599# CONFIG_AUTOFS_FS is not set
2600CONFIG_AUTOFS4_FS=m
2601CONFIG_FUSE_FS=y
2602# CONFIG_CUSE is not set
2603CONFIG_GENERIC_ACL=y
2604
2605#
2606# Caches
2607#
2608# CONFIG_FSCACHE is not set
2609
2610#
2611# CD-ROM/DVD Filesystems
2612#
2613CONFIG_ISO9660_FS=m
2614CONFIG_JOLIET=y
2615CONFIG_ZISOFS=y
2616CONFIG_UDF_FS=m
2617CONFIG_UDF_NLS=y
2618
2619#
2620# DOS/FAT/NT Filesystems
2621#
2622CONFIG_FAT_FS=y
2623CONFIG_MSDOS_FS=y
2624CONFIG_VFAT_FS=y
2625CONFIG_FAT_DEFAULT_CODEPAGE=437
2626CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
2627CONFIG_NTFS_FS=m
2628# CONFIG_NTFS_DEBUG is not set
2629CONFIG_NTFS_RW=y
2630
2631#
2632# Pseudo filesystems
2633#
2634CONFIG_PROC_FS=y
2635CONFIG_PROC_SYSCTL=y
2636CONFIG_PROC_PAGE_MONITOR=y
2637CONFIG_SYSFS=y
2638CONFIG_TMPFS=y
2639CONFIG_TMPFS_POSIX_ACL=y
2640# CONFIG_HUGETLB_PAGE is not set
2641CONFIG_CONFIGFS_FS=m
2642CONFIG_MISC_FILESYSTEMS=y
2643CONFIG_ADFS_FS=m
2644# CONFIG_ADFS_FS_RW is not set
2645CONFIG_AFFS_FS=m
2646# CONFIG_ECRYPT_FS is not set
2647CONFIG_HFS_FS=m
2648CONFIG_HFSPLUS_FS=m
2649CONFIG_BEFS_FS=m
2650# CONFIG_BEFS_DEBUG is not set
2651CONFIG_BFS_FS=m
2652CONFIG_EFS_FS=m
2653CONFIG_JFFS2_FS=y
2654CONFIG_JFFS2_FS_DEBUG=0
2655CONFIG_JFFS2_FS_WRITEBUFFER=y
2656# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
2657CONFIG_JFFS2_SUMMARY=y
2658CONFIG_JFFS2_FS_XATTR=y
2659CONFIG_JFFS2_FS_POSIX_ACL=y
2660CONFIG_JFFS2_FS_SECURITY=y
2661CONFIG_JFFS2_COMPRESSION_OPTIONS=y
2662CONFIG_JFFS2_ZLIB=y
2663CONFIG_JFFS2_LZO=y
2664CONFIG_JFFS2_RTIME=y
2665CONFIG_JFFS2_RUBIN=y
2666# CONFIG_JFFS2_CMODE_NONE is not set
2667# CONFIG_JFFS2_CMODE_PRIORITY is not set
2668# CONFIG_JFFS2_CMODE_SIZE is not set
2669CONFIG_JFFS2_CMODE_FAVOURLZO=y
2670CONFIG_UBIFS_FS=y
2671CONFIG_UBIFS_FS_XATTR=y
2672CONFIG_UBIFS_FS_ADVANCED_COMPR=y
2673CONFIG_UBIFS_FS_LZO=y
2674CONFIG_UBIFS_FS_ZLIB=y
2675# CONFIG_UBIFS_FS_DEBUG is not set
2676CONFIG_CRAMFS=m
2677CONFIG_SQUASHFS=y
2678# CONFIG_SQUASHFS_EMBEDDED is not set
2679CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
2680CONFIG_VXFS_FS=m
2681CONFIG_MINIX_FS=m
2682CONFIG_OMFS_FS=m
2683CONFIG_HPFS_FS=m
2684CONFIG_QNX4FS_FS=m
2685CONFIG_ROMFS_FS=m
2686CONFIG_ROMFS_BACKED_BY_BLOCK=y
2687# CONFIG_ROMFS_BACKED_BY_MTD is not set
2688# CONFIG_ROMFS_BACKED_BY_BOTH is not set
2689CONFIG_ROMFS_ON_BLOCK=y
2690CONFIG_SYSV_FS=m
2691CONFIG_UFS_FS=m
2692# CONFIG_UFS_FS_WRITE is not set
2693# CONFIG_UFS_DEBUG is not set
2694CONFIG_NETWORK_FILESYSTEMS=y
2695CONFIG_NFS_FS=y
2696CONFIG_NFS_V3=y
2697# CONFIG_NFS_V3_ACL is not set
2698CONFIG_NFS_V4=y
2699# CONFIG_NFS_V4_1 is not set
2700CONFIG_ROOT_NFS=y
2701CONFIG_NFSD=m
2702CONFIG_NFSD_V2_ACL=y
2703CONFIG_NFSD_V3=y
2704CONFIG_NFSD_V3_ACL=y
2705CONFIG_NFSD_V4=y
2706CONFIG_LOCKD=y
2707CONFIG_LOCKD_V4=y
2708CONFIG_EXPORTFS=m
2709CONFIG_NFS_ACL_SUPPORT=m
2710CONFIG_NFS_COMMON=y
2711CONFIG_SUNRPC=y
2712CONFIG_SUNRPC_GSS=y
2713CONFIG_RPCSEC_GSS_KRB5=y
2714# CONFIG_RPCSEC_GSS_SPKM3 is not set
2715CONFIG_SMB_FS=m
2716# CONFIG_SMB_NLS_DEFAULT is not set
2717CONFIG_CIFS=m
2718CONFIG_CIFS_STATS=y
2719CONFIG_CIFS_STATS2=y
2720# CONFIG_CIFS_WEAK_PW_HASH is not set
2721# CONFIG_CIFS_UPCALL is not set
2722# CONFIG_CIFS_XATTR is not set
2723# CONFIG_CIFS_DEBUG2 is not set
2724# CONFIG_CIFS_DFS_UPCALL is not set
2725CONFIG_CIFS_EXPERIMENTAL=y
2726CONFIG_NCP_FS=m
2727# CONFIG_NCPFS_PACKET_SIGNING is not set
2728# CONFIG_NCPFS_IOCTL_LOCKING is not set
2729# CONFIG_NCPFS_STRONG is not set
2730# CONFIG_NCPFS_NFS_NS is not set
2731# CONFIG_NCPFS_OS2_NS is not set
2732# CONFIG_NCPFS_SMALLDOS is not set
2733# CONFIG_NCPFS_NLS is not set
2734# CONFIG_NCPFS_EXTRAS is not set
2735CONFIG_CODA_FS=m
2736CONFIG_AFS_FS=m
2737# CONFIG_AFS_DEBUG is not set
2738CONFIG_9P_FS=m
2739
2740#
2741# Partition Types
2742#
2743CONFIG_PARTITION_ADVANCED=y
2744# CONFIG_ACORN_PARTITION is not set
2745# CONFIG_OSF_PARTITION is not set
2746# CONFIG_AMIGA_PARTITION is not set
2747# CONFIG_ATARI_PARTITION is not set
2748CONFIG_MAC_PARTITION=y
2749CONFIG_MSDOS_PARTITION=y
2750CONFIG_BSD_DISKLABEL=y
2751CONFIG_MINIX_SUBPARTITION=y
2752CONFIG_SOLARIS_X86_PARTITION=y
2753# CONFIG_UNIXWARE_DISKLABEL is not set
2754CONFIG_LDM_PARTITION=y
2755CONFIG_LDM_DEBUG=y
2756# CONFIG_SGI_PARTITION is not set
2757# CONFIG_ULTRIX_PARTITION is not set
2758# CONFIG_SUN_PARTITION is not set
2759# CONFIG_KARMA_PARTITION is not set
2760CONFIG_EFI_PARTITION=y
2761# CONFIG_SYSV68_PARTITION is not set
2762CONFIG_NLS=y
2763CONFIG_NLS_DEFAULT="iso8859-1"
2764CONFIG_NLS_CODEPAGE_437=y
2765CONFIG_NLS_CODEPAGE_737=m
2766CONFIG_NLS_CODEPAGE_775=m
2767CONFIG_NLS_CODEPAGE_850=m
2768CONFIG_NLS_CODEPAGE_852=m
2769CONFIG_NLS_CODEPAGE_855=m
2770CONFIG_NLS_CODEPAGE_857=m
2771CONFIG_NLS_CODEPAGE_860=m
2772CONFIG_NLS_CODEPAGE_861=m
2773CONFIG_NLS_CODEPAGE_862=m
2774CONFIG_NLS_CODEPAGE_863=m
2775CONFIG_NLS_CODEPAGE_864=m
2776CONFIG_NLS_CODEPAGE_865=m
2777CONFIG_NLS_CODEPAGE_866=m
2778CONFIG_NLS_CODEPAGE_869=m
2779CONFIG_NLS_CODEPAGE_936=m
2780CONFIG_NLS_CODEPAGE_950=m
2781CONFIG_NLS_CODEPAGE_932=m
2782CONFIG_NLS_CODEPAGE_949=m
2783CONFIG_NLS_CODEPAGE_874=m
2784CONFIG_NLS_ISO8859_8=m
2785CONFIG_NLS_CODEPAGE_1250=m
2786CONFIG_NLS_CODEPAGE_1251=m
2787CONFIG_NLS_ASCII=m
2788CONFIG_NLS_ISO8859_1=y
2789CONFIG_NLS_ISO8859_2=m
2790CONFIG_NLS_ISO8859_3=m
2791CONFIG_NLS_ISO8859_4=m
2792CONFIG_NLS_ISO8859_5=m
2793CONFIG_NLS_ISO8859_6=m
2794CONFIG_NLS_ISO8859_7=m
2795CONFIG_NLS_ISO8859_9=m
2796CONFIG_NLS_ISO8859_13=m
2797CONFIG_NLS_ISO8859_14=m
2798CONFIG_NLS_ISO8859_15=m
2799CONFIG_NLS_KOI8_R=m
2800CONFIG_NLS_KOI8_U=m
2801CONFIG_NLS_UTF8=y
2802CONFIG_DLM=m
2803# CONFIG_DLM_DEBUG is not set
2804
2805#
2806# Kernel hacking
2807#
2808CONFIG_PRINTK_TIME=y
2809CONFIG_ENABLE_WARN_DEPRECATED=y
2810CONFIG_ENABLE_MUST_CHECK=y
2811CONFIG_FRAME_WARN=1024
2812CONFIG_MAGIC_SYSRQ=y
2813# CONFIG_STRIP_ASM_SYMS is not set
2814# CONFIG_UNUSED_SYMBOLS is not set
2815CONFIG_DEBUG_FS=y
2816# CONFIG_HEADERS_CHECK is not set
2817CONFIG_DEBUG_KERNEL=y
2818# CONFIG_DEBUG_SHIRQ is not set
2819CONFIG_DETECT_SOFTLOCKUP=y
2820# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
2821CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
2822CONFIG_DETECT_HUNG_TASK=y
2823# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
2824CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
2825CONFIG_SCHED_DEBUG=y
2826CONFIG_SCHEDSTATS=y
2827CONFIG_TIMER_STATS=y
2828# CONFIG_DEBUG_OBJECTS is not set
2829# CONFIG_DEBUG_SLAB is not set
2830# CONFIG_DEBUG_KMEMLEAK is not set
2831CONFIG_DEBUG_PREEMPT=y
2832# CONFIG_DEBUG_RT_MUTEXES is not set
2833# CONFIG_RT_MUTEX_TESTER is not set
2834# CONFIG_DEBUG_SPINLOCK is not set
2835CONFIG_DEBUG_MUTEXES=y
2836# CONFIG_DEBUG_LOCK_ALLOC is not set
2837# CONFIG_PROVE_LOCKING is not set
2838# CONFIG_LOCK_STAT is not set
2839# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
2840# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
2841CONFIG_STACKTRACE=y
2842# CONFIG_DEBUG_KOBJECT is not set
2843# CONFIG_DEBUG_BUGVERBOSE is not set
2844# CONFIG_DEBUG_INFO is not set
2845# CONFIG_DEBUG_VM is not set
2846# CONFIG_DEBUG_WRITECOUNT is not set
2847# CONFIG_DEBUG_MEMORY_INIT is not set
2848# CONFIG_DEBUG_LIST is not set
2849# CONFIG_DEBUG_SG is not set
2850# CONFIG_DEBUG_NOTIFIERS is not set
2851# CONFIG_DEBUG_CREDENTIALS is not set
2852# CONFIG_BOOT_PRINTK_DELAY is not set
2853# CONFIG_RCU_TORTURE_TEST is not set
2854# CONFIG_RCU_CPU_STALL_DETECTOR is not set
2855# CONFIG_BACKTRACE_SELF_TEST is not set
2856# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
2857# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
2858# CONFIG_FAULT_INJECTION is not set
2859# CONFIG_LATENCYTOP is not set
2860# CONFIG_SYSCTL_SYSCALL_CHECK is not set
2861# CONFIG_PAGE_POISONING is not set
2862CONFIG_NOP_TRACER=y
2863CONFIG_HAVE_FUNCTION_TRACER=y
2864CONFIG_RING_BUFFER=y
2865CONFIG_EVENT_TRACING=y
2866CONFIG_CONTEXT_SWITCH_TRACER=y
2867CONFIG_RING_BUFFER_ALLOW_SWAP=y
2868CONFIG_TRACING=y
2869CONFIG_TRACING_SUPPORT=y
2870CONFIG_FTRACE=y
2871# CONFIG_FUNCTION_TRACER is not set
2872# CONFIG_IRQSOFF_TRACER is not set
2873# CONFIG_PREEMPT_TRACER is not set
2874# CONFIG_SCHED_TRACER is not set
2875# CONFIG_ENABLE_DEFAULT_TRACERS is not set
2876# CONFIG_BOOT_TRACER is not set
2877CONFIG_BRANCH_PROFILE_NONE=y
2878# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
2879# CONFIG_PROFILE_ALL_BRANCHES is not set
2880# CONFIG_STACK_TRACER is not set
2881# CONFIG_KMEMTRACE is not set
2882# CONFIG_WORKQUEUE_TRACER is not set
2883# CONFIG_BLK_DEV_IO_TRACE is not set
2884# CONFIG_RING_BUFFER_BENCHMARK is not set
2885# CONFIG_DYNAMIC_DEBUG is not set
2886# CONFIG_SAMPLES is not set
2887CONFIG_HAVE_ARCH_KGDB=y
2888# CONFIG_KGDB is not set
2889CONFIG_ARM_UNWIND=y
2890# CONFIG_DEBUG_USER is not set
2891# CONFIG_DEBUG_ERRORS is not set
2892# CONFIG_DEBUG_STACK_USAGE is not set
2893# CONFIG_DEBUG_LL is not set
2894# CONFIG_OC_ETM is not set
2895
2896#
2897# Security options
2898#
2899CONFIG_KEYS=y
2900# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
2901# CONFIG_SECURITY is not set
2902# CONFIG_SECURITYFS is not set
2903# CONFIG_DEFAULT_SECURITY_SELINUX is not set
2904# CONFIG_DEFAULT_SECURITY_SMACK is not set
2905# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
2906CONFIG_DEFAULT_SECURITY_DAC=y
2907CONFIG_DEFAULT_SECURITY=""
2908CONFIG_XOR_BLOCKS=m
2909CONFIG_ASYNC_CORE=m
2910CONFIG_ASYNC_MEMCPY=m
2911CONFIG_ASYNC_XOR=m
2912CONFIG_ASYNC_PQ=m
2913CONFIG_ASYNC_RAID6_RECOV=m
2914CONFIG_CRYPTO=y
2915
2916#
2917# Crypto core or helper
2918#
2919CONFIG_CRYPTO_FIPS=y
2920CONFIG_CRYPTO_ALGAPI=y
2921CONFIG_CRYPTO_ALGAPI2=y
2922CONFIG_CRYPTO_AEAD=m
2923CONFIG_CRYPTO_AEAD2=y
2924CONFIG_CRYPTO_BLKCIPHER=y
2925CONFIG_CRYPTO_BLKCIPHER2=y
2926CONFIG_CRYPTO_HASH=y
2927CONFIG_CRYPTO_HASH2=y
2928CONFIG_CRYPTO_RNG=m
2929CONFIG_CRYPTO_RNG2=y
2930CONFIG_CRYPTO_PCOMP=y
2931CONFIG_CRYPTO_MANAGER=y
2932CONFIG_CRYPTO_MANAGER2=y
2933CONFIG_CRYPTO_GF128MUL=m
2934CONFIG_CRYPTO_NULL=m
2935CONFIG_CRYPTO_WORKQUEUE=y
2936CONFIG_CRYPTO_CRYPTD=m
2937CONFIG_CRYPTO_AUTHENC=m
2938CONFIG_CRYPTO_TEST=m
2939
2940#
2941# Authenticated Encryption with Associated Data
2942#
2943CONFIG_CRYPTO_CCM=m
2944CONFIG_CRYPTO_GCM=m
2945CONFIG_CRYPTO_SEQIV=m
2946
2947#
2948# Block modes
2949#
2950CONFIG_CRYPTO_CBC=y
2951CONFIG_CRYPTO_CTR=m
2952CONFIG_CRYPTO_CTS=m
2953CONFIG_CRYPTO_ECB=y
2954CONFIG_CRYPTO_LRW=m
2955CONFIG_CRYPTO_PCBC=m
2956CONFIG_CRYPTO_XTS=m
2957
2958#
2959# Hash modes
2960#
2961CONFIG_CRYPTO_HMAC=m
2962CONFIG_CRYPTO_XCBC=m
2963# CONFIG_CRYPTO_VMAC is not set
2964
2965#
2966# Digest
2967#
2968CONFIG_CRYPTO_CRC32C=y
2969CONFIG_CRYPTO_GHASH=m
2970CONFIG_CRYPTO_MD4=m
2971CONFIG_CRYPTO_MD5=y
2972CONFIG_CRYPTO_MICHAEL_MIC=y
2973CONFIG_CRYPTO_RMD128=m
2974CONFIG_CRYPTO_RMD160=m
2975CONFIG_CRYPTO_RMD256=m
2976CONFIG_CRYPTO_RMD320=m
2977CONFIG_CRYPTO_SHA1=m
2978CONFIG_CRYPTO_SHA256=m
2979CONFIG_CRYPTO_SHA512=m
2980CONFIG_CRYPTO_TGR192=m
2981CONFIG_CRYPTO_WP512=m
2982
2983#
2984# Ciphers
2985#
2986CONFIG_CRYPTO_AES=y
2987CONFIG_CRYPTO_ANUBIS=m
2988CONFIG_CRYPTO_ARC4=y
2989CONFIG_CRYPTO_BLOWFISH=m
2990CONFIG_CRYPTO_CAMELLIA=m
2991CONFIG_CRYPTO_CAST5=m
2992CONFIG_CRYPTO_CAST6=m
2993CONFIG_CRYPTO_DES=y
2994CONFIG_CRYPTO_FCRYPT=m
2995CONFIG_CRYPTO_KHAZAD=m
2996CONFIG_CRYPTO_SALSA20=m
2997CONFIG_CRYPTO_SEED=m
2998CONFIG_CRYPTO_SERPENT=m
2999CONFIG_CRYPTO_TEA=m
3000CONFIG_CRYPTO_TWOFISH=m
3001CONFIG_CRYPTO_TWOFISH_COMMON=m
3002
3003#
3004# Compression
3005#
3006CONFIG_CRYPTO_DEFLATE=y
3007# CONFIG_CRYPTO_ZLIB is not set
3008CONFIG_CRYPTO_LZO=y
3009
3010#
3011# Random Number Generation
3012#
3013CONFIG_CRYPTO_ANSI_CPRNG=m
3014CONFIG_CRYPTO_HW=y
3015CONFIG_BINARY_PRINTF=y
3016
3017#
3018# Library routines
3019#
3020CONFIG_BITREVERSE=y
3021CONFIG_GENERIC_FIND_LAST_BIT=y
3022CONFIG_CRC_CCITT=y
3023CONFIG_CRC16=y
3024CONFIG_CRC_T10DIF=y
3025CONFIG_CRC_ITU_T=y
3026CONFIG_CRC32=y
3027CONFIG_CRC7=y
3028CONFIG_LIBCRC32C=y
3029CONFIG_ZLIB_INFLATE=y
3030CONFIG_ZLIB_DEFLATE=y
3031CONFIG_LZO_COMPRESS=y
3032CONFIG_LZO_DECOMPRESS=y
3033CONFIG_DECOMPRESS_GZIP=y
3034CONFIG_DECOMPRESS_BZIP2=y
3035CONFIG_DECOMPRESS_LZMA=y
3036CONFIG_TEXTSEARCH=y
3037CONFIG_TEXTSEARCH_KMP=m
3038CONFIG_TEXTSEARCH_BM=m
3039CONFIG_TEXTSEARCH_FSM=m
3040CONFIG_HAS_IOMEM=y
3041CONFIG_HAS_IOPORT=y
3042CONFIG_HAS_DMA=y
3043CONFIG_NLATTR=y