mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-10 02:55:55 +02:00
kernel: add some omap/pandaboard patches.
This commit is contained in:
36
lfs/linux
36
lfs/linux
@@ -161,11 +161,41 @@ endif
|
||||
|
||||
ifeq "$(KCFG)" "-multi"
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.27-fs-exec-atomic64-operand-requires-impossible-reload.patch
|
||||
# cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2-0001-panda-wlan-fix.patch
|
||||
# cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2-0002-panda-i2c.patch
|
||||
# cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2-panda-reboot.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-smsc95xx-add_mac_addr_param.patch
|
||||
|
||||
# Patchset for Omap (beagle/panda).
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch
|
||||
|
||||
# Patchset for Wandboard.
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0001-imx6qdl-wandboard-dts-backport.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0002-ARM-dts-imx6qdl-wandboard-add-gpio-lines-to-wandboar.patch
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
From 2e908aeebd6804296e7d14a96de6be1e2de38e93 Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Brugger <matthias.bgg@gmail.com>
|
||||
Date: Wed, 23 Jan 2013 19:50:38 +0100
|
||||
Subject: [PATCH 2/2] omap2: twl-common: Add default power configuration
|
||||
|
||||
This patch adds a generic power script configuration.
|
||||
When rebooting an OMAP3530 at 125 MHz, the reboot hangs.
|
||||
With the generic power script, TWL4030 will be reset
|
||||
when a warm reset occures. This way the OMAP3530 does not
|
||||
hang on reboot.
|
||||
|
||||
Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/twl-common.c | 38 ++++++++++++++++++++++++++++++++++++++
|
||||
arch/arm/mach-omap2/twl-common.h | 1 +
|
||||
2 files changed, 39 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c
|
||||
index e49b40b..f096beb 100644
|
||||
--- a/arch/arm/mach-omap2/twl-common.c
|
||||
+++ b/arch/arm/mach-omap2/twl-common.c
|
||||
@@ -120,6 +120,41 @@ static struct twl4030_audio_data omap3_audio_pdata = {
|
||||
.codec = &omap3_codec,
|
||||
};
|
||||
|
||||
+static struct twl4030_ins wrst_seq[] __initdata = {
|
||||
+ {MSG_SINGULAR(DEV_GRP_NULL, 0x1b, RES_STATE_OFF), 2},
|
||||
+ {MSG_SINGULAR(DEV_GRP_P1, 0xf, RES_STATE_WRST), 15},
|
||||
+ {MSG_SINGULAR(DEV_GRP_P1, 0x10, RES_STATE_WRST), 15},
|
||||
+ {MSG_SINGULAR(DEV_GRP_P1, 0x7, RES_STATE_WRST), 0x60},
|
||||
+ {MSG_SINGULAR(DEV_GRP_P1, 0x19, RES_STATE_ACTIVE), 2},
|
||||
+ {MSG_SINGULAR(DEV_GRP_NULL, 0x1b, RES_STATE_ACTIVE), 2},
|
||||
+};
|
||||
+
|
||||
+static struct twl4030_script wrst_script __initdata = {
|
||||
+ .script = wrst_seq,
|
||||
+ .size = ARRAY_SIZE(wrst_seq),
|
||||
+ .flags = TWL4030_WRST_SCRIPT,
|
||||
+};
|
||||
+
|
||||
+static struct twl4030_script *omap3_power_scripts[] __initdata = {
|
||||
+ &wrst_script,
|
||||
+};
|
||||
+
|
||||
+static struct twl4030_resconfig omap3_rconfig[] = {
|
||||
+ { .resource = RES_HFCLKOUT, .devgroup = DEV_GRP_P3, .type = -1,
|
||||
+ .type2 = -1 },
|
||||
+ { .resource = RES_VDD1, .devgroup = DEV_GRP_P1, .type = -1,
|
||||
+ .type2 = -1 },
|
||||
+ { .resource = RES_VDD2, .devgroup = DEV_GRP_P1, .type = -1,
|
||||
+ .type2 = -1 },
|
||||
+ { 0, 0},
|
||||
+};
|
||||
+
|
||||
+static struct twl4030_power_data omap3_power_pdata = {
|
||||
+ .scripts = omap3_power_scripts,
|
||||
+ .num = ARRAY_SIZE(omap3_power_scripts),
|
||||
+ .resource_config = omap3_rconfig,
|
||||
+};
|
||||
+
|
||||
static struct regulator_consumer_supply omap3_vdda_dac_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),
|
||||
};
|
||||
@@ -224,6 +259,9 @@ void __init omap3_pmic_get_config(struct twl4030_platform_data *pmic_data,
|
||||
if (pdata_flags & TWL_COMMON_PDATA_AUDIO && !pmic_data->audio)
|
||||
pmic_data->audio = &omap3_audio_pdata;
|
||||
|
||||
+ if (pdata_flags & TWL_COMMON_PDATA_POWER && !pmic_data->power)
|
||||
+ pmic_data->power = &omap3_power_pdata;
|
||||
+
|
||||
/* Common regulator configurations */
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_VDAC && !pmic_data->vdac)
|
||||
pmic_data->vdac = &omap3_vdac_idata;
|
||||
diff --git a/arch/arm/mach-omap2/twl-common.h b/arch/arm/mach-omap2/twl-common.h
|
||||
index dcfbad5..dbeb905 100644
|
||||
--- a/arch/arm/mach-omap2/twl-common.h
|
||||
+++ b/arch/arm/mach-omap2/twl-common.h
|
||||
@@ -7,6 +7,7 @@
|
||||
#define TWL_COMMON_PDATA_BCI (1 << 1)
|
||||
#define TWL_COMMON_PDATA_MADC (1 << 2)
|
||||
#define TWL_COMMON_PDATA_AUDIO (1 << 3)
|
||||
+#define TWL_COMMON_PDATA_POWER (1 << 4)
|
||||
|
||||
/* Common LDO regulators for TWL4030/TWL6030 */
|
||||
#define TWL_COMMON_REGULATOR_VDAC (1 << 0)
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,444 @@
|
||||
From 369b60c157f67a71a6f302ab9843ae2de1805a2a Mon Sep 17 00:00:00 2001
|
||||
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
Date: Mon, 22 Oct 2012 15:43:00 +0200
|
||||
Subject: [PATCH 1/6] omap3isp: Use the common clock framework
|
||||
|
||||
Expose the two ISP external clocks XCLKA and XCLKB as common clocks for
|
||||
subdev drivers.
|
||||
|
||||
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
Acked-by: Mike Turquette <mturquette@linaro.org>
|
||||
---
|
||||
drivers/media/platform/omap3isp/isp.c | 277 ++++++++++++++++++++++++---------
|
||||
drivers/media/platform/omap3isp/isp.h | 22 ++-
|
||||
include/media/omap3isp.h | 10 +-
|
||||
3 files changed, 225 insertions(+), 84 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c
|
||||
index 6e5ad8e..1d7dbd5 100644
|
||||
--- a/drivers/media/platform/omap3isp/isp.c
|
||||
+++ b/drivers/media/platform/omap3isp/isp.c
|
||||
@@ -55,6 +55,7 @@
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
#include <linux/clk.h>
|
||||
+#include <linux/clkdev.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
@@ -148,6 +149,201 @@ void omap3isp_flush(struct isp_device *isp)
|
||||
isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_REVISION);
|
||||
}
|
||||
|
||||
+/* -----------------------------------------------------------------------------
|
||||
+ * XCLK
|
||||
+ */
|
||||
+
|
||||
+#define to_isp_xclk(_hw) container_of(_hw, struct isp_xclk, hw)
|
||||
+
|
||||
+static void isp_xclk_update(struct isp_xclk *xclk, u32 divider)
|
||||
+{
|
||||
+ switch (xclk->id) {
|
||||
+ case ISP_XCLK_A:
|
||||
+ isp_reg_clr_set(xclk->isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
|
||||
+ ISPTCTRL_CTRL_DIVA_MASK,
|
||||
+ divider << ISPTCTRL_CTRL_DIVA_SHIFT);
|
||||
+ break;
|
||||
+ case ISP_XCLK_B:
|
||||
+ isp_reg_clr_set(xclk->isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
|
||||
+ ISPTCTRL_CTRL_DIVB_MASK,
|
||||
+ divider << ISPTCTRL_CTRL_DIVB_SHIFT);
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int isp_xclk_prepare(struct clk_hw *hw)
|
||||
+{
|
||||
+ struct isp_xclk *xclk = to_isp_xclk(hw);
|
||||
+
|
||||
+ omap3isp_get(xclk->isp);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void isp_xclk_unprepare(struct clk_hw *hw)
|
||||
+{
|
||||
+ struct isp_xclk *xclk = to_isp_xclk(hw);
|
||||
+
|
||||
+ omap3isp_put(xclk->isp);
|
||||
+}
|
||||
+
|
||||
+static int isp_xclk_enable(struct clk_hw *hw)
|
||||
+{
|
||||
+ struct isp_xclk *xclk = to_isp_xclk(hw);
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&xclk->lock, flags);
|
||||
+ isp_xclk_update(xclk, xclk->divider);
|
||||
+ xclk->enabled = true;
|
||||
+ spin_unlock_irqrestore(&xclk->lock, flags);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void isp_xclk_disable(struct clk_hw *hw)
|
||||
+{
|
||||
+ struct isp_xclk *xclk = to_isp_xclk(hw);
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&xclk->lock, flags);
|
||||
+ isp_xclk_update(xclk, 0);
|
||||
+ xclk->enabled = false;
|
||||
+ spin_unlock_irqrestore(&xclk->lock, flags);
|
||||
+}
|
||||
+
|
||||
+static unsigned long isp_xclk_recalc_rate(struct clk_hw *hw,
|
||||
+ unsigned long parent_rate)
|
||||
+{
|
||||
+ struct isp_xclk *xclk = to_isp_xclk(hw);
|
||||
+
|
||||
+ return parent_rate / xclk->divider;
|
||||
+}
|
||||
+
|
||||
+static u32 isp_xclk_calc_divider(unsigned long *rate, unsigned long parent_rate)
|
||||
+{
|
||||
+ u32 divider;
|
||||
+
|
||||
+ if (*rate >= parent_rate) {
|
||||
+ *rate = parent_rate;
|
||||
+ return ISPTCTRL_CTRL_DIV_BYPASS;
|
||||
+ }
|
||||
+
|
||||
+ divider = DIV_ROUND_CLOSEST(parent_rate, *rate);
|
||||
+ if (divider >= ISPTCTRL_CTRL_DIV_BYPASS)
|
||||
+ divider = ISPTCTRL_CTRL_DIV_BYPASS - 1;
|
||||
+
|
||||
+ *rate = parent_rate / divider;
|
||||
+ return divider;
|
||||
+}
|
||||
+
|
||||
+static long isp_xclk_round_rate(struct clk_hw *hw, unsigned long rate,
|
||||
+ unsigned long *parent_rate)
|
||||
+{
|
||||
+ isp_xclk_calc_divider(&rate, *parent_rate);
|
||||
+ return rate;
|
||||
+}
|
||||
+
|
||||
+static int isp_xclk_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
+ unsigned long parent_rate)
|
||||
+{
|
||||
+ struct isp_xclk *xclk = to_isp_xclk(hw);
|
||||
+ unsigned long flags;
|
||||
+ u32 divider;
|
||||
+
|
||||
+ divider = isp_xclk_calc_divider(&rate, parent_rate);
|
||||
+
|
||||
+ spin_lock_irqsave(&xclk->lock, flags);
|
||||
+
|
||||
+ xclk->divider = divider;
|
||||
+ if (xclk->enabled)
|
||||
+ isp_xclk_update(xclk, divider);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&xclk->lock, flags);
|
||||
+
|
||||
+ dev_dbg(xclk->isp->dev, "%s: cam_xclk%c set to %lu Hz (div %u)\n",
|
||||
+ __func__, xclk->id == ISP_XCLK_A ? 'a' : 'b', rate, divider);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct clk_ops isp_xclk_ops = {
|
||||
+ .prepare = isp_xclk_prepare,
|
||||
+ .unprepare = isp_xclk_unprepare,
|
||||
+ .enable = isp_xclk_enable,
|
||||
+ .disable = isp_xclk_disable,
|
||||
+ .recalc_rate = isp_xclk_recalc_rate,
|
||||
+ .round_rate = isp_xclk_round_rate,
|
||||
+ .set_rate = isp_xclk_set_rate,
|
||||
+};
|
||||
+
|
||||
+static const char *isp_xclk_parent_name = "cam_mclk";
|
||||
+
|
||||
+static const struct clk_init_data isp_xclk_init_data = {
|
||||
+ .name = "cam_xclk",
|
||||
+ .ops = &isp_xclk_ops,
|
||||
+ .parent_names = &isp_xclk_parent_name,
|
||||
+ .num_parents = 1,
|
||||
+};
|
||||
+
|
||||
+static int isp_xclk_init(struct isp_device *isp)
|
||||
+{
|
||||
+ struct isp_platform_data *pdata = isp->pdata;
|
||||
+ struct clk_init_data init;
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) {
|
||||
+ struct isp_xclk *xclk = &isp->xclks[i];
|
||||
+ struct clk *clk;
|
||||
+
|
||||
+ xclk->isp = isp;
|
||||
+ xclk->id = i == 0 ? ISP_XCLK_A : ISP_XCLK_B;
|
||||
+ xclk->divider = 1;
|
||||
+ spin_lock_init(&xclk->lock);
|
||||
+
|
||||
+ init.name = i == 0 ? "cam_xclka" : "cam_xclkb";
|
||||
+ init.ops = &isp_xclk_ops;
|
||||
+ init.parent_names = &isp_xclk_parent_name;
|
||||
+ init.num_parents = 1;
|
||||
+
|
||||
+ xclk->hw.init = &init;
|
||||
+
|
||||
+ clk = devm_clk_register(isp->dev, &xclk->hw);
|
||||
+ if (IS_ERR(clk))
|
||||
+ return PTR_ERR(clk);
|
||||
+
|
||||
+ if (pdata->xclks[i].con_id == NULL &&
|
||||
+ pdata->xclks[i].dev_id == NULL)
|
||||
+ continue;
|
||||
+
|
||||
+ xclk->lookup = kzalloc(sizeof(*xclk->lookup), GFP_KERNEL);
|
||||
+ if (xclk->lookup == NULL)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ xclk->lookup->con_id = pdata->xclks[i].con_id;
|
||||
+ xclk->lookup->dev_id = pdata->xclks[i].dev_id;
|
||||
+ xclk->lookup->clk = clk;
|
||||
+
|
||||
+ clkdev_add(xclk->lookup);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void isp_xclk_cleanup(struct isp_device *isp)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) {
|
||||
+ struct isp_xclk *xclk = &isp->xclks[i];
|
||||
+
|
||||
+ if (xclk->lookup)
|
||||
+ clkdev_drop(xclk->lookup);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+/* -----------------------------------------------------------------------------
|
||||
+ * Interrupts
|
||||
+ */
|
||||
+
|
||||
/*
|
||||
* isp_enable_interrupts - Enable ISP interrupts.
|
||||
* @isp: OMAP3 ISP device
|
||||
@@ -180,80 +376,6 @@ static void isp_disable_interrupts(struct isp_device *isp)
|
||||
isp_reg_writel(isp, 0, OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0ENABLE);
|
||||
}
|
||||
|
||||
-/**
|
||||
- * isp_set_xclk - Configures the specified cam_xclk to the desired frequency.
|
||||
- * @isp: OMAP3 ISP device
|
||||
- * @xclk: Desired frequency of the clock in Hz. 0 = stable low, 1 is stable high
|
||||
- * @xclksel: XCLK to configure (0 = A, 1 = B).
|
||||
- *
|
||||
- * Configures the specified MCLK divisor in the ISP timing control register
|
||||
- * (TCTRL_CTRL) to generate the desired xclk clock value.
|
||||
- *
|
||||
- * Divisor = cam_mclk_hz / xclk
|
||||
- *
|
||||
- * Returns the final frequency that is actually being generated
|
||||
- **/
|
||||
-static u32 isp_set_xclk(struct isp_device *isp, u32 xclk, u8 xclksel)
|
||||
-{
|
||||
- u32 divisor;
|
||||
- u32 currentxclk;
|
||||
- unsigned long mclk_hz;
|
||||
-
|
||||
- if (!omap3isp_get(isp))
|
||||
- return 0;
|
||||
-
|
||||
- mclk_hz = clk_get_rate(isp->clock[ISP_CLK_CAM_MCLK]);
|
||||
-
|
||||
- if (xclk >= mclk_hz) {
|
||||
- divisor = ISPTCTRL_CTRL_DIV_BYPASS;
|
||||
- currentxclk = mclk_hz;
|
||||
- } else if (xclk >= 2) {
|
||||
- divisor = mclk_hz / xclk;
|
||||
- if (divisor >= ISPTCTRL_CTRL_DIV_BYPASS)
|
||||
- divisor = ISPTCTRL_CTRL_DIV_BYPASS - 1;
|
||||
- currentxclk = mclk_hz / divisor;
|
||||
- } else {
|
||||
- divisor = xclk;
|
||||
- currentxclk = 0;
|
||||
- }
|
||||
-
|
||||
- switch (xclksel) {
|
||||
- case ISP_XCLK_A:
|
||||
- isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
|
||||
- ISPTCTRL_CTRL_DIVA_MASK,
|
||||
- divisor << ISPTCTRL_CTRL_DIVA_SHIFT);
|
||||
- dev_dbg(isp->dev, "isp_set_xclk(): cam_xclka set to %d Hz\n",
|
||||
- currentxclk);
|
||||
- break;
|
||||
- case ISP_XCLK_B:
|
||||
- isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
|
||||
- ISPTCTRL_CTRL_DIVB_MASK,
|
||||
- divisor << ISPTCTRL_CTRL_DIVB_SHIFT);
|
||||
- dev_dbg(isp->dev, "isp_set_xclk(): cam_xclkb set to %d Hz\n",
|
||||
- currentxclk);
|
||||
- break;
|
||||
- case ISP_XCLK_NONE:
|
||||
- default:
|
||||
- omap3isp_put(isp);
|
||||
- dev_dbg(isp->dev, "ISP_ERR: isp_set_xclk(): Invalid requested "
|
||||
- "xclk. Must be 0 (A) or 1 (B).\n");
|
||||
- return -EINVAL;
|
||||
- }
|
||||
-
|
||||
- /* Do we go from stable whatever to clock? */
|
||||
- if (divisor >= 2 && isp->xclk_divisor[xclksel - 1] < 2)
|
||||
- omap3isp_get(isp);
|
||||
- /* Stopping the clock. */
|
||||
- else if (divisor < 2 && isp->xclk_divisor[xclksel - 1] >= 2)
|
||||
- omap3isp_put(isp);
|
||||
-
|
||||
- isp->xclk_divisor[xclksel - 1] = divisor;
|
||||
-
|
||||
- omap3isp_put(isp);
|
||||
-
|
||||
- return currentxclk;
|
||||
-}
|
||||
-
|
||||
/*
|
||||
* isp_core_init - ISP core settings
|
||||
* @isp: OMAP3 ISP device
|
||||
@@ -1969,6 +2091,7 @@ static int isp_remove(struct platform_device *pdev)
|
||||
|
||||
isp_unregister_entities(isp);
|
||||
isp_cleanup_modules(isp);
|
||||
+ isp_xclk_cleanup(isp);
|
||||
|
||||
__omap3isp_get(isp, false);
|
||||
iommu_detach_device(isp->domain, &pdev->dev);
|
||||
@@ -2042,7 +2165,6 @@ static int isp_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
isp->autoidle = autoidle;
|
||||
- isp->platform_cb.set_xclk = isp_set_xclk;
|
||||
|
||||
mutex_init(&isp->isp_mutex);
|
||||
spin_lock_init(&isp->stat_lock);
|
||||
@@ -2093,6 +2215,10 @@ static int isp_probe(struct platform_device *pdev)
|
||||
if (ret < 0)
|
||||
goto error_isp;
|
||||
|
||||
+ ret = isp_xclk_init(isp);
|
||||
+ if (ret < 0)
|
||||
+ goto error_isp;
|
||||
+
|
||||
/* Memory resources */
|
||||
for (m = 0; m < ARRAY_SIZE(isp_res_maps); m++)
|
||||
if (isp->revision == isp_res_maps[m].isp_rev)
|
||||
@@ -2162,6 +2288,7 @@ detach_dev:
|
||||
free_domain:
|
||||
iommu_domain_free(isp->domain);
|
||||
error_isp:
|
||||
+ isp_xclk_cleanup(isp);
|
||||
omap3isp_put(isp);
|
||||
error:
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
diff --git a/drivers/media/platform/omap3isp/isp.h b/drivers/media/platform/omap3isp/isp.h
|
||||
index c77e1f2..cd3eff4 100644
|
||||
--- a/drivers/media/platform/omap3isp/isp.h
|
||||
+++ b/drivers/media/platform/omap3isp/isp.h
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
#include <media/omap3isp.h>
|
||||
#include <media/v4l2-device.h>
|
||||
+#include <linux/clk-provider.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/iommu.h>
|
||||
@@ -125,8 +126,20 @@ struct isp_reg {
|
||||
u32 val;
|
||||
};
|
||||
|
||||
-struct isp_platform_callback {
|
||||
- u32 (*set_xclk)(struct isp_device *isp, u32 xclk, u8 xclksel);
|
||||
+enum isp_xclk_id {
|
||||
+ ISP_XCLK_A,
|
||||
+ ISP_XCLK_B,
|
||||
+};
|
||||
+
|
||||
+struct isp_xclk {
|
||||
+ struct isp_device *isp;
|
||||
+ struct clk_hw hw;
|
||||
+ struct clk_lookup *lookup;
|
||||
+ enum isp_xclk_id id;
|
||||
+
|
||||
+ spinlock_t lock; /* Protects enabled and divider */
|
||||
+ bool enabled;
|
||||
+ unsigned int divider;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -149,6 +162,7 @@ struct isp_platform_callback {
|
||||
* @cam_mclk: Pointer to camera functional clock structure.
|
||||
* @csi2_fck: Pointer to camera CSI2 complexIO clock structure.
|
||||
* @l3_ick: Pointer to OMAP3 L3 bus interface clock.
|
||||
+ * @xclks: External clocks provided by the ISP
|
||||
* @irq: Currently attached ISP ISR callbacks information structure.
|
||||
* @isp_af: Pointer to current settings for ISP AutoFocus SCM.
|
||||
* @isp_hist: Pointer to current settings for ISP Histogram SCM.
|
||||
@@ -185,12 +199,12 @@ struct isp_device {
|
||||
int has_context;
|
||||
int ref_count;
|
||||
unsigned int autoidle;
|
||||
- u32 xclk_divisor[2]; /* Two clocks, a and b. */
|
||||
#define ISP_CLK_CAM_ICK 0
|
||||
#define ISP_CLK_CAM_MCLK 1
|
||||
#define ISP_CLK_CSI2_FCK 2
|
||||
#define ISP_CLK_L3_ICK 3
|
||||
struct clk *clock[4];
|
||||
+ struct isp_xclk xclks[2];
|
||||
|
||||
/* ISP modules */
|
||||
struct ispstat isp_af;
|
||||
@@ -209,8 +223,6 @@ struct isp_device {
|
||||
unsigned int subclk_resources;
|
||||
|
||||
struct iommu_domain *domain;
|
||||
-
|
||||
- struct isp_platform_callback platform_cb;
|
||||
};
|
||||
|
||||
#define v4l2_dev_to_isp_device(dev) \
|
||||
diff --git a/include/media/omap3isp.h b/include/media/omap3isp.h
|
||||
index 9584269..c9d06d9 100644
|
||||
--- a/include/media/omap3isp.h
|
||||
+++ b/include/media/omap3isp.h
|
||||
@@ -29,10 +29,6 @@
|
||||
struct i2c_board_info;
|
||||
struct isp_device;
|
||||
|
||||
-#define ISP_XCLK_NONE 0
|
||||
-#define ISP_XCLK_A 1
|
||||
-#define ISP_XCLK_B 2
|
||||
-
|
||||
enum isp_interface_type {
|
||||
ISP_INTERFACE_PARALLEL,
|
||||
ISP_INTERFACE_CSI2A_PHY2,
|
||||
@@ -153,7 +149,13 @@ struct isp_v4l2_subdevs_group {
|
||||
} bus; /* gcc < 4.6.0 chokes on anonymous union initializers */
|
||||
};
|
||||
|
||||
+struct isp_platform_xclk {
|
||||
+ const char *dev_id;
|
||||
+ const char *con_id;
|
||||
+};
|
||||
+
|
||||
struct isp_platform_data {
|
||||
+ struct isp_platform_xclk xclks[2];
|
||||
struct isp_v4l2_subdevs_group *subdevs;
|
||||
void (*set_constraints)(struct isp_device *isp, bool enable);
|
||||
};
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
From 7c44c8a989ad01bd7cd02370d4ca4a742db218be Mon Sep 17 00:00:00 2001
|
||||
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
Date: Tue, 25 Sep 2012 15:46:34 +0200
|
||||
Subject: [PATCH 2/6] mt9m032: Fix PLL setup
|
||||
|
||||
The MT9M032 PLL was assumed to be identical to the MT9P031 PLL but
|
||||
differs significantly. Update the registers definitions and PLL limits
|
||||
according to the datasheet.
|
||||
|
||||
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
---
|
||||
drivers/media/i2c/mt9m032.c | 24 +++++++++++++-----------
|
||||
1 file changed, 13 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/i2c/mt9m032.c b/drivers/media/i2c/mt9m032.c
|
||||
index f80c1d7e..30d755a 100644
|
||||
--- a/drivers/media/i2c/mt9m032.c
|
||||
+++ b/drivers/media/i2c/mt9m032.c
|
||||
@@ -87,7 +87,7 @@
|
||||
#define MT9M032_RESTART 0x0b
|
||||
#define MT9M032_RESET 0x0d
|
||||
#define MT9M032_PLL_CONFIG1 0x11
|
||||
-#define MT9M032_PLL_CONFIG1_OUTDIV_MASK 0x3f
|
||||
+#define MT9M032_PLL_CONFIG1_PREDIV_MASK 0x3f
|
||||
#define MT9M032_PLL_CONFIG1_MUL_SHIFT 8
|
||||
#define MT9M032_READ_MODE1 0x1e
|
||||
#define MT9M032_READ_MODE2 0x20
|
||||
@@ -106,6 +106,8 @@
|
||||
#define MT9M032_GAIN_AMUL_SHIFT 6
|
||||
#define MT9M032_GAIN_ANALOG_MASK 0x3f
|
||||
#define MT9M032_FORMATTER1 0x9e
|
||||
+#define MT9M032_FORMATTER1_PLL_P1_6 (1 << 8)
|
||||
+#define MT9M032_FORMATTER1_PARALLEL (1 << 12)
|
||||
#define MT9M032_FORMATTER2 0x9f
|
||||
#define MT9M032_FORMATTER2_DOUT_EN 0x1000
|
||||
#define MT9M032_FORMATTER2_PIXCLK_EN 0x2000
|
||||
@@ -121,8 +123,6 @@
|
||||
#define MT9P031_PLL_CONTROL_PWROFF 0x0050
|
||||
#define MT9P031_PLL_CONTROL_PWRON 0x0051
|
||||
#define MT9P031_PLL_CONTROL_USEPLL 0x0052
|
||||
-#define MT9P031_PLL_CONFIG2 0x11
|
||||
-#define MT9P031_PLL_CONFIG2_P1_DIV_MASK 0x1f
|
||||
|
||||
struct mt9m032 {
|
||||
struct v4l2_subdev subdev;
|
||||
@@ -255,13 +255,14 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor)
|
||||
.n_max = 64,
|
||||
.m_min = 16,
|
||||
.m_max = 255,
|
||||
- .p1_min = 1,
|
||||
- .p1_max = 128,
|
||||
+ .p1_min = 6,
|
||||
+ .p1_max = 7,
|
||||
};
|
||||
|
||||
struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
|
||||
struct mt9m032_platform_data *pdata = sensor->pdata;
|
||||
struct aptina_pll pll;
|
||||
+ u16 reg_val;
|
||||
int ret;
|
||||
|
||||
pll.ext_clock = pdata->ext_clock;
|
||||
@@ -274,18 +275,19 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor)
|
||||
sensor->pix_clock = pdata->pix_clock;
|
||||
|
||||
ret = mt9m032_write(client, MT9M032_PLL_CONFIG1,
|
||||
- (pll.m << MT9M032_PLL_CONFIG1_MUL_SHIFT)
|
||||
- | (pll.p1 - 1));
|
||||
- if (!ret)
|
||||
- ret = mt9m032_write(client, MT9P031_PLL_CONFIG2, pll.n - 1);
|
||||
+ (pll.m << MT9M032_PLL_CONFIG1_MUL_SHIFT) |
|
||||
+ ((pll.n - 1) & MT9M032_PLL_CONFIG1_PREDIV_MASK));
|
||||
if (!ret)
|
||||
ret = mt9m032_write(client, MT9P031_PLL_CONTROL,
|
||||
MT9P031_PLL_CONTROL_PWRON |
|
||||
MT9P031_PLL_CONTROL_USEPLL);
|
||||
if (!ret) /* more reserved, Continuous, Master Mode */
|
||||
ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8006);
|
||||
- if (!ret) /* Set 14-bit mode, select 7 divider */
|
||||
- ret = mt9m032_write(client, MT9M032_FORMATTER1, 0x111e);
|
||||
+ if (!ret) {
|
||||
+ reg_val = (pll.p1 == 6 ? MT9M032_FORMATTER1_PLL_P1_6 : 0)
|
||||
+ | MT9M032_FORMATTER1_PARALLEL | 0x001e; /* 14-bit */
|
||||
+ ret = mt9m032_write(client, MT9M032_FORMATTER1, reg_val);
|
||||
+ }
|
||||
|
||||
return ret;
|
||||
}
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
From 1115becbb4875d62abb10f94a9510c81f376606f Mon Sep 17 00:00:00 2001
|
||||
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
Date: Wed, 26 Sep 2012 10:54:17 +0200
|
||||
Subject: [PATCH 3/6] mt9m032: Define MT9M032_READ_MODE1 bits
|
||||
|
||||
Replace hardcoded values with #define's.
|
||||
|
||||
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
---
|
||||
drivers/media/i2c/mt9m032.c | 22 +++++++++++++++++++++-
|
||||
1 file changed, 21 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/media/i2c/mt9m032.c b/drivers/media/i2c/mt9m032.c
|
||||
index 30d755a..de150d3 100644
|
||||
--- a/drivers/media/i2c/mt9m032.c
|
||||
+++ b/drivers/media/i2c/mt9m032.c
|
||||
@@ -90,6 +90,24 @@
|
||||
#define MT9M032_PLL_CONFIG1_PREDIV_MASK 0x3f
|
||||
#define MT9M032_PLL_CONFIG1_MUL_SHIFT 8
|
||||
#define MT9M032_READ_MODE1 0x1e
|
||||
+#define MT9M032_READ_MODE1_OUTPUT_BAD_FRAMES (1 << 13)
|
||||
+#define MT9M032_READ_MODE1_MAINTAIN_FRAME_RATE (1 << 12)
|
||||
+#define MT9M032_READ_MODE1_XOR_LINE_VALID (1 << 11)
|
||||
+#define MT9M032_READ_MODE1_CONT_LINE_VALID (1 << 10)
|
||||
+#define MT9M032_READ_MODE1_INVERT_TRIGGER (1 << 9)
|
||||
+#define MT9M032_READ_MODE1_SNAPSHOT (1 << 8)
|
||||
+#define MT9M032_READ_MODE1_GLOBAL_RESET (1 << 7)
|
||||
+#define MT9M032_READ_MODE1_BULB_EXPOSURE (1 << 6)
|
||||
+#define MT9M032_READ_MODE1_INVERT_STROBE (1 << 5)
|
||||
+#define MT9M032_READ_MODE1_STROBE_ENABLE (1 << 4)
|
||||
+#define MT9M032_READ_MODE1_STROBE_START_TRIG1 (0 << 2)
|
||||
+#define MT9M032_READ_MODE1_STROBE_START_EXP (1 << 2)
|
||||
+#define MT9M032_READ_MODE1_STROBE_START_SHUTTER (2 << 2)
|
||||
+#define MT9M032_READ_MODE1_STROBE_START_TRIG2 (3 << 2)
|
||||
+#define MT9M032_READ_MODE1_STROBE_END_TRIG1 (0 << 0)
|
||||
+#define MT9M032_READ_MODE1_STROBE_END_EXP (1 << 0)
|
||||
+#define MT9M032_READ_MODE1_STROBE_END_SHUTTER (2 << 0)
|
||||
+#define MT9M032_READ_MODE1_STROBE_END_TRIG2 (3 << 0)
|
||||
#define MT9M032_READ_MODE2 0x20
|
||||
#define MT9M032_READ_MODE2_VFLIP_SHIFT 15
|
||||
#define MT9M032_READ_MODE2_HFLIP_SHIFT 14
|
||||
@@ -282,7 +300,9 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor)
|
||||
MT9P031_PLL_CONTROL_PWRON |
|
||||
MT9P031_PLL_CONTROL_USEPLL);
|
||||
if (!ret) /* more reserved, Continuous, Master Mode */
|
||||
- ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8006);
|
||||
+ ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8000 |
|
||||
+ MT9M032_READ_MODE1_STROBE_START_EXP |
|
||||
+ MT9M032_READ_MODE1_STROBE_END_SHUTTER);
|
||||
if (!ret) {
|
||||
reg_val = (pll.p1 == 6 ? MT9M032_FORMATTER1_PLL_P1_6 : 0)
|
||||
| MT9M032_FORMATTER1_PARALLEL | 0x001e; /* 14-bit */
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
From d3f188f38eaa34acf6375d5d88fe27971aae1170 Mon Sep 17 00:00:00 2001
|
||||
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
Date: Fri, 21 Dec 2012 20:34:06 +0100
|
||||
Subject: [PATCH 4/6] mt9p031: Use devm_* managed helpers
|
||||
|
||||
Replace kzalloc and gpio_request_one by their managed equivalents.
|
||||
|
||||
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
---
|
||||
drivers/media/i2c/mt9p031.c | 13 +++----------
|
||||
1 file changed, 3 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c
|
||||
index e328332..e0bad59 100644
|
||||
--- a/drivers/media/i2c/mt9p031.c
|
||||
+++ b/drivers/media/i2c/mt9p031.c
|
||||
@@ -927,7 +927,7 @@ static int mt9p031_probe(struct i2c_client *client,
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
- mt9p031 = kzalloc(sizeof(*mt9p031), GFP_KERNEL);
|
||||
+ mt9p031 = devm_kzalloc(&client->dev, sizeof(*mt9p031), GFP_KERNEL);
|
||||
if (mt9p031 == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -1001,8 +1001,8 @@ static int mt9p031_probe(struct i2c_client *client,
|
||||
mt9p031->format.colorspace = V4L2_COLORSPACE_SRGB;
|
||||
|
||||
if (pdata->reset != -1) {
|
||||
- ret = gpio_request_one(pdata->reset, GPIOF_OUT_INIT_LOW,
|
||||
- "mt9p031_rst");
|
||||
+ ret = devm_gpio_request_one(&client->dev, pdata->reset,
|
||||
+ GPIOF_OUT_INIT_LOW, "mt9p031_rst");
|
||||
if (ret < 0)
|
||||
goto done;
|
||||
|
||||
@@ -1013,12 +1013,8 @@ static int mt9p031_probe(struct i2c_client *client,
|
||||
|
||||
done:
|
||||
if (ret < 0) {
|
||||
- if (mt9p031->reset != -1)
|
||||
- gpio_free(mt9p031->reset);
|
||||
-
|
||||
v4l2_ctrl_handler_free(&mt9p031->ctrls);
|
||||
media_entity_cleanup(&mt9p031->subdev.entity);
|
||||
- kfree(mt9p031);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -1032,9 +1028,6 @@ static int mt9p031_remove(struct i2c_client *client)
|
||||
v4l2_ctrl_handler_free(&mt9p031->ctrls);
|
||||
v4l2_device_unregister_subdev(subdev);
|
||||
media_entity_cleanup(&subdev->entity);
|
||||
- if (mt9p031->reset != -1)
|
||||
- gpio_free(mt9p031->reset);
|
||||
- kfree(mt9p031);
|
||||
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
From 9ff2bc0c9458f0eecde6d9b52a899fd2bb1dd3a3 Mon Sep 17 00:00:00 2001
|
||||
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
Date: Tue, 8 May 2012 15:10:36 +0200
|
||||
Subject: [PATCH 5/6] mt9p031: Add support for regulators
|
||||
|
||||
Enable the regulators when powering the sensor up, and disable them when
|
||||
powering it down.
|
||||
|
||||
The regulators are mandatory. Boards that don't allow controlling the
|
||||
sensor power lines must provide fixed voltage regulators.
|
||||
|
||||
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
---
|
||||
drivers/media/i2c/mt9p031.c | 24 ++++++++++++++++++++++++
|
||||
1 file changed, 24 insertions(+)
|
||||
|
||||
diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c
|
||||
index e0bad59..ecf4492 100644
|
||||
--- a/drivers/media/i2c/mt9p031.c
|
||||
+++ b/drivers/media/i2c/mt9p031.c
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/log2.h>
|
||||
#include <linux/pm.h>
|
||||
+#include <linux/regulator/consumer.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/videodev2.h>
|
||||
|
||||
@@ -121,6 +122,10 @@ struct mt9p031 {
|
||||
struct mutex power_lock; /* lock to protect power_count */
|
||||
int power_count;
|
||||
|
||||
+ struct regulator *vaa;
|
||||
+ struct regulator *vdd;
|
||||
+ struct regulator *vdd_io;
|
||||
+
|
||||
enum mt9p031_model model;
|
||||
struct aptina_pll pll;
|
||||
int reset;
|
||||
@@ -264,6 +269,11 @@ static int mt9p031_power_on(struct mt9p031 *mt9p031)
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
|
||||
+ /* Bring up the supplies */
|
||||
+ regulator_enable(mt9p031->vdd);
|
||||
+ regulator_enable(mt9p031->vdd_io);
|
||||
+ regulator_enable(mt9p031->vaa);
|
||||
+
|
||||
/* Emable clock */
|
||||
if (mt9p031->pdata->set_xclk)
|
||||
mt9p031->pdata->set_xclk(&mt9p031->subdev,
|
||||
@@ -285,6 +295,10 @@ static void mt9p031_power_off(struct mt9p031 *mt9p031)
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
|
||||
+ regulator_disable(mt9p031->vaa);
|
||||
+ regulator_disable(mt9p031->vdd_io);
|
||||
+ regulator_disable(mt9p031->vdd);
|
||||
+
|
||||
if (mt9p031->pdata->set_xclk)
|
||||
mt9p031->pdata->set_xclk(&mt9p031->subdev, 0);
|
||||
}
|
||||
@@ -937,6 +951,16 @@ static int mt9p031_probe(struct i2c_client *client,
|
||||
mt9p031->model = did->driver_data;
|
||||
mt9p031->reset = -1;
|
||||
|
||||
+ mt9p031->vaa = devm_regulator_get(&client->dev, "vaa");
|
||||
+ mt9p031->vdd = devm_regulator_get(&client->dev, "vdd");
|
||||
+ mt9p031->vdd_io = devm_regulator_get(&client->dev, "vdd_io");
|
||||
+
|
||||
+ if (IS_ERR(mt9p031->vaa) || IS_ERR(mt9p031->vdd) ||
|
||||
+ IS_ERR(mt9p031->vdd_io)) {
|
||||
+ dev_err(&client->dev, "Unable to get regulators\n");
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
v4l2_ctrl_handler_init(&mt9p031->ctrls, ARRAY_SIZE(mt9p031_ctrls) + 6);
|
||||
|
||||
v4l2_ctrl_new_std(&mt9p031->ctrls, &mt9p031_ctrl_ops,
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
From 6cd62f5ae305142c0490e80caa04f99f00029b68 Mon Sep 17 00:00:00 2001
|
||||
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
Date: Fri, 21 Dec 2012 20:11:55 +0100
|
||||
Subject: [PATCH 6/6] mt9p031: Use the common clock framework
|
||||
|
||||
Configure the device external clock using the common clock framework
|
||||
instead of a board code callback function.
|
||||
|
||||
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
Acked-by: Sakari Ailus <sakari.ailus@iki.fi>
|
||||
---
|
||||
drivers/media/i2c/mt9p031.c | 21 ++++++++++++++-------
|
||||
include/media/mt9p031.h | 2 --
|
||||
2 files changed, 14 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c
|
||||
index ecf4492..28cf95b 100644
|
||||
--- a/drivers/media/i2c/mt9p031.c
|
||||
+++ b/drivers/media/i2c/mt9p031.c
|
||||
@@ -12,6 +12,7 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
+#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/gpio.h>
|
||||
@@ -122,6 +123,7 @@ struct mt9p031 {
|
||||
struct mutex power_lock; /* lock to protect power_count */
|
||||
int power_count;
|
||||
|
||||
+ struct clk *clk;
|
||||
struct regulator *vaa;
|
||||
struct regulator *vdd;
|
||||
struct regulator *vdd_io;
|
||||
@@ -200,7 +202,7 @@ static int mt9p031_reset(struct mt9p031 *mt9p031)
|
||||
0);
|
||||
}
|
||||
|
||||
-static int mt9p031_pll_setup(struct mt9p031 *mt9p031)
|
||||
+static int mt9p031_clk_setup(struct mt9p031 *mt9p031)
|
||||
{
|
||||
static const struct aptina_pll_limits limits = {
|
||||
.ext_clock_min = 6000000,
|
||||
@@ -221,6 +223,12 @@ static int mt9p031_pll_setup(struct mt9p031 *mt9p031)
|
||||
struct i2c_client *client = v4l2_get_subdevdata(&mt9p031->subdev);
|
||||
struct mt9p031_platform_data *pdata = mt9p031->pdata;
|
||||
|
||||
+ mt9p031->clk = devm_clk_get(&client->dev, NULL);
|
||||
+ if (IS_ERR(mt9p031->clk))
|
||||
+ return PTR_ERR(mt9p031->clk);
|
||||
+
|
||||
+ clk_set_rate(mt9p031->clk, pdata->ext_freq);
|
||||
+
|
||||
mt9p031->pll.ext_clock = pdata->ext_freq;
|
||||
mt9p031->pll.pix_clock = pdata->target_freq;
|
||||
|
||||
@@ -275,9 +283,8 @@ static int mt9p031_power_on(struct mt9p031 *mt9p031)
|
||||
regulator_enable(mt9p031->vaa);
|
||||
|
||||
/* Emable clock */
|
||||
- if (mt9p031->pdata->set_xclk)
|
||||
- mt9p031->pdata->set_xclk(&mt9p031->subdev,
|
||||
- mt9p031->pdata->ext_freq);
|
||||
+ if (mt9p031->clk)
|
||||
+ clk_prepare_enable(mt9p031->clk);
|
||||
|
||||
/* Now RESET_BAR must be high */
|
||||
if (mt9p031->reset != -1) {
|
||||
@@ -299,8 +306,8 @@ static void mt9p031_power_off(struct mt9p031 *mt9p031)
|
||||
regulator_disable(mt9p031->vdd_io);
|
||||
regulator_disable(mt9p031->vdd);
|
||||
|
||||
- if (mt9p031->pdata->set_xclk)
|
||||
- mt9p031->pdata->set_xclk(&mt9p031->subdev, 0);
|
||||
+ if (mt9p031->clk)
|
||||
+ clk_disable_unprepare(mt9p031->clk);
|
||||
}
|
||||
|
||||
static int __mt9p031_set_power(struct mt9p031 *mt9p031, bool on)
|
||||
@@ -1033,7 +1040,7 @@ static int mt9p031_probe(struct i2c_client *client,
|
||||
mt9p031->reset = pdata->reset;
|
||||
}
|
||||
|
||||
- ret = mt9p031_pll_setup(mt9p031);
|
||||
+ ret = mt9p031_clk_setup(mt9p031);
|
||||
|
||||
done:
|
||||
if (ret < 0) {
|
||||
diff --git a/include/media/mt9p031.h b/include/media/mt9p031.h
|
||||
index 0c97b19..b1e63f2 100644
|
||||
--- a/include/media/mt9p031.h
|
||||
+++ b/include/media/mt9p031.h
|
||||
@@ -5,13 +5,11 @@ struct v4l2_subdev;
|
||||
|
||||
/*
|
||||
* struct mt9p031_platform_data - MT9P031 platform data
|
||||
- * @set_xclk: Clock frequency set callback
|
||||
* @reset: Chip reset GPIO (set to -1 if not used)
|
||||
* @ext_freq: Input clock frequency
|
||||
* @target_freq: Pixel clock frequency
|
||||
*/
|
||||
struct mt9p031_platform_data {
|
||||
- int (*set_xclk)(struct v4l2_subdev *subdev, int hz);
|
||||
int reset;
|
||||
int ext_freq;
|
||||
int target_freq;
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
From 6ac98647956cbff190954b4cac6bd71fdbb8647b Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Wed, 23 Mar 2011 08:37:54 -0500
|
||||
Subject: [PATCH 1/5] meego: modedb add Toshiba LTA070B220F 800x480 support
|
||||
|
||||
from http://wiki.meego.com/ARM/Meego_on_Beagleboard_from_scratch
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
drivers/video/modedb.c | 4 ++++
|
||||
1 files changed, 4 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c
|
||||
index 5b686de..69ad1ec 100644
|
||||
--- a/drivers/video/modedb.c
|
||||
+++ b/drivers/video/modedb.c
|
||||
@@ -293,6 +293,10 @@ static const struct fb_videomode modedb[] = {
|
||||
/* 864x480 @ 60 Hz, 35.15 kHz hsync */
|
||||
{ NULL, 60, 864, 480, 27777, 1, 1, 1, 1, 0, 0,
|
||||
0, FB_VMODE_NONINTERLACED },
|
||||
+
|
||||
+ /* 800x480 @ 60 Hz, Toshiba LTA070B220F 7 inch LCD */
|
||||
+ { NULL, 60, 800, 480, 32787, 48, 80, 33, 31, 32, 2,
|
||||
+ FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED },
|
||||
};
|
||||
|
||||
#ifdef CONFIG_FB_MODE_HELPERS
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
@@ -0,0 +1,217 @@
|
||||
From e989473bea15beef8d480b822a619e7b8fca860c Mon Sep 17 00:00:00 2001
|
||||
From: "Manjunathappa, Prakash" <prakash.pm@ti.com>
|
||||
Date: Mon, 1 Aug 2011 18:25:11 +0530
|
||||
Subject: [PATCH 2/5] backlight: Add TLC59108 backlight control driver
|
||||
|
||||
This patch adds support for I2C configurable TLC59108 backlight
|
||||
control driver.
|
||||
|
||||
Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
|
||||
Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
|
||||
---
|
||||
drivers/video/backlight/Kconfig | 8 ++
|
||||
drivers/video/backlight/Makefile | 1 +
|
||||
drivers/video/backlight/tlc59108.c | 160 ++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 169 insertions(+)
|
||||
create mode 100644 drivers/video/backlight/tlc59108.c
|
||||
|
||||
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
|
||||
index db10d01..04a2275 100644
|
||||
--- a/drivers/video/backlight/Kconfig
|
||||
+++ b/drivers/video/backlight/Kconfig
|
||||
@@ -418,6 +418,14 @@ config BACKLIGHT_AS3711
|
||||
If you have an Austrian Microsystems AS3711 say Y to enable the
|
||||
backlight driver.
|
||||
|
||||
+config BACKLIGHT_TLC59108
|
||||
+ tristate "TLC59108 LCD Backlight Driver"
|
||||
+ depends on I2C && BACKLIGHT_CLASS_DEVICE
|
||||
+ default n
|
||||
+ help
|
||||
+ If you have an LCD Panel with backlight control via TLC59108,
|
||||
+ say Y to enable its LCD control driver.
|
||||
+
|
||||
endif # BACKLIGHT_CLASS_DEVICE
|
||||
|
||||
endif # BACKLIGHT_LCD_SUPPORT
|
||||
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
|
||||
index 96c4d62..3687852 100644
|
||||
--- a/drivers/video/backlight/Makefile
|
||||
+++ b/drivers/video/backlight/Makefile
|
||||
@@ -41,6 +41,7 @@ obj-$(CONFIG_BACKLIGHT_LP855X) += lp855x_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_LP8788) += lp8788_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_MAX8925) += max8925_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_OMAP1) += omap1_bl.o
|
||||
+obj-$(CONFIG_BACKLIGHT_TLC59108) += tlc59108.o
|
||||
obj-$(CONFIG_BACKLIGHT_OT200) += ot200_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_PANDORA) += pandora_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_PCF50633) += pcf50633-backlight.o
|
||||
diff --git a/drivers/video/backlight/tlc59108.c b/drivers/video/backlight/tlc59108.c
|
||||
new file mode 100644
|
||||
index 0000000..4f4ea34
|
||||
--- /dev/null
|
||||
+++ b/drivers/video/backlight/tlc59108.c
|
||||
@@ -0,0 +1,160 @@
|
||||
+/*
|
||||
+ * ti81xxhdmi_tlc59108.c
|
||||
+ *
|
||||
+ * Copyright (C) 2011 Texas Instruments
|
||||
+ * Author: Senthil Natarajan
|
||||
+ *
|
||||
+ * tlc59108 HDMI Driver
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 2 as published by
|
||||
+ * the Free Software Foundation.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
+ * more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along with
|
||||
+ * this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+ * History:
|
||||
+ *
|
||||
+ * Senthil Natarajan<senthil.n@ti.com> July 2011 I2C driver for tlc59108
|
||||
+ * backlight control
|
||||
+ */
|
||||
+
|
||||
+#include <linux/i2c.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/backlight.h>
|
||||
+#include <linux/fb.h>
|
||||
+
|
||||
+#define tlc59108_MODULE_NAME "tlc59108"
|
||||
+#define TLC59108_MODE1 0x00
|
||||
+#define TLC59108_PWM2 0x04
|
||||
+#define TLC59108_LEDOUT0 0x0c
|
||||
+#define TLC59108_LEDOUT1 0x0d
|
||||
+#define TLC59108_MAX_BRIGHTNESS 0xFF
|
||||
+
|
||||
+struct tlc59108_bl {
|
||||
+ struct i2c_client *client;
|
||||
+ struct backlight_device *bl;
|
||||
+};
|
||||
+
|
||||
+static void tlc59108_bl_set_backlight(struct tlc59108_bl *data, int brightness)
|
||||
+{
|
||||
+ /* Set Mode1 Register */
|
||||
+ i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00);
|
||||
+
|
||||
+ /* Set LEDOUT0 Register */
|
||||
+ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x21);
|
||||
+
|
||||
+ /* Set Backlight Duty Cycle*/
|
||||
+ i2c_smbus_write_byte_data(data->client, TLC59108_PWM2,
|
||||
+ brightness & 0xff);
|
||||
+}
|
||||
+
|
||||
+static int tlc59108_bl_get_brightness(struct backlight_device *dev)
|
||||
+{
|
||||
+ struct backlight_properties *props = &dev->props;
|
||||
+
|
||||
+ return props->brightness;
|
||||
+}
|
||||
+
|
||||
+static int tlc59108_bl_update_status(struct backlight_device *dev)
|
||||
+{
|
||||
+ struct backlight_properties *props = &dev->props;
|
||||
+ struct tlc59108_bl *data = dev_get_drvdata(&dev->dev);
|
||||
+ int brightness = props->brightness;
|
||||
+
|
||||
+ tlc59108_bl_set_backlight(data, brightness);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct backlight_ops bl_ops = {
|
||||
+ .get_brightness = tlc59108_bl_get_brightness,
|
||||
+ .update_status = tlc59108_bl_update_status,
|
||||
+};
|
||||
+
|
||||
+static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id)
|
||||
+{
|
||||
+ struct backlight_properties props;
|
||||
+ struct tlc59108_bl *data = kzalloc(sizeof(struct tlc59108_bl),
|
||||
+ GFP_KERNEL);
|
||||
+ int ret = 0;
|
||||
+
|
||||
+ if (!data)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ i2c_set_clientdata(c, data);
|
||||
+ data->client = c;
|
||||
+
|
||||
+ memset(&props, 0, sizeof(struct backlight_properties));
|
||||
+ props.max_brightness = TLC59108_MAX_BRIGHTNESS;
|
||||
+ props.type = BACKLIGHT_RAW;
|
||||
+ data->bl = backlight_device_register("tlc59108-bl", &c->dev, data,
|
||||
+ &bl_ops, &props);
|
||||
+ if (IS_ERR(data->bl)) {
|
||||
+ ret = PTR_ERR(data->bl);
|
||||
+ goto err_reg;
|
||||
+ }
|
||||
+
|
||||
+ data->bl->props.brightness = TLC59108_MAX_BRIGHTNESS;
|
||||
+
|
||||
+ backlight_update_status(data->bl);
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+err_reg:
|
||||
+ data->bl = NULL;
|
||||
+ kfree(data);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int tlc59108_remove(struct i2c_client *c)
|
||||
+{
|
||||
+ struct tlc59108_bl *data = i2c_get_clientdata(c);
|
||||
+
|
||||
+ backlight_device_unregister(data->bl);
|
||||
+ data->bl = NULL;
|
||||
+
|
||||
+ kfree(data);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* I2C Device ID table */
|
||||
+static const struct i2c_device_id tlc59108_id[] = {
|
||||
+ { "tlc59108", 0 },
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(i2c, tlc59108_id);
|
||||
+
|
||||
+/* I2C driver data */
|
||||
+static struct i2c_driver tlc59108_driver = {
|
||||
+ .driver = {
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .name = tlc59108_MODULE_NAME,
|
||||
+ },
|
||||
+ .probe = tlc59108_probe,
|
||||
+ .remove = tlc59108_remove,
|
||||
+ .id_table = tlc59108_id,
|
||||
+};
|
||||
+
|
||||
+static int __init tlc59108_init(void)
|
||||
+{
|
||||
+ return i2c_add_driver(&tlc59108_driver);
|
||||
+}
|
||||
+
|
||||
+static void __exit tlc59108_exit(void)
|
||||
+{
|
||||
+ i2c_del_driver(&tlc59108_driver);
|
||||
+}
|
||||
+
|
||||
+module_init(tlc59108_init);
|
||||
+module_exit(tlc59108_exit);
|
||||
+
|
||||
+MODULE_DESCRIPTION("LCD/Backlight control for TLC59108");
|
||||
+MODULE_AUTHOR("Senthil Natarajan <senthil.n@ti.com>");
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
From 40cbddde06a9f0e1845810b904502f922fc3288f Mon Sep 17 00:00:00 2001
|
||||
From: Koen Kooi <koen@dominion.thruhere.net>
|
||||
Date: Fri, 27 Apr 2012 21:30:00 +0200
|
||||
Subject: [PATCH 3/5] tlc59108: adjust for beagleboard+uLCD7
|
||||
|
||||
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
|
||||
---
|
||||
drivers/video/backlight/tlc59108.c | 46 ++++++++++++++++++++++++-----------
|
||||
1 files changed, 31 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/backlight/tlc59108.c b/drivers/video/backlight/tlc59108.c
|
||||
index 4f4ea34..40a21e7 100644
|
||||
--- a/drivers/video/backlight/tlc59108.c
|
||||
+++ b/drivers/video/backlight/tlc59108.c
|
||||
@@ -29,9 +29,16 @@
|
||||
#include <linux/backlight.h>
|
||||
#include <linux/fb.h>
|
||||
|
||||
-#define tlc59108_MODULE_NAME "tlc59108"
|
||||
#define TLC59108_MODE1 0x00
|
||||
-#define TLC59108_PWM2 0x04
|
||||
+#define TLC59108_MODE2 0x01
|
||||
+#define TLC59108_PWM0 0x02
|
||||
+#define TLC59108_PWM1 0x03
|
||||
+#define TLC59108_PWM2 0x04
|
||||
+#define TLC59108_PWM3 0x05
|
||||
+#define TLC59108_PWM4 0x06
|
||||
+#define TLC59108_PWM5 0x07
|
||||
+#define TLC59108_PWM6 0x08
|
||||
+#define TLC59108_PWM7 0x09
|
||||
#define TLC59108_LEDOUT0 0x0c
|
||||
#define TLC59108_LEDOUT1 0x0d
|
||||
#define TLC59108_MAX_BRIGHTNESS 0xFF
|
||||
@@ -43,15 +50,9 @@ struct tlc59108_bl {
|
||||
|
||||
static void tlc59108_bl_set_backlight(struct tlc59108_bl *data, int brightness)
|
||||
{
|
||||
- /* Set Mode1 Register */
|
||||
- i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00);
|
||||
-
|
||||
- /* Set LEDOUT0 Register */
|
||||
- i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x21);
|
||||
-
|
||||
/* Set Backlight Duty Cycle*/
|
||||
i2c_smbus_write_byte_data(data->client, TLC59108_PWM2,
|
||||
- brightness & 0xff);
|
||||
+ 0xff - brightness );
|
||||
}
|
||||
|
||||
static int tlc59108_bl_get_brightness(struct backlight_device *dev)
|
||||
@@ -65,8 +66,18 @@ static int tlc59108_bl_update_status(struct backlight_device *dev)
|
||||
{
|
||||
struct backlight_properties *props = &dev->props;
|
||||
struct tlc59108_bl *data = dev_get_drvdata(&dev->dev);
|
||||
+
|
||||
int brightness = props->brightness;
|
||||
|
||||
+ if (dev->props.state & BL_CORE_FBBLANK) {
|
||||
+ brightness = 0;
|
||||
+ /* Set LEDOUT0 Register */
|
||||
+ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x10);
|
||||
+ } else {
|
||||
+ /* Set LEDOUT0 Register */
|
||||
+ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x30);
|
||||
+ }
|
||||
+
|
||||
tlc59108_bl_set_backlight(data, brightness);
|
||||
|
||||
return 0;
|
||||
@@ -77,7 +88,7 @@ static const struct backlight_ops bl_ops = {
|
||||
.update_status = tlc59108_bl_update_status,
|
||||
};
|
||||
|
||||
-static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id)
|
||||
+static int __devinit tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id)
|
||||
{
|
||||
struct backlight_properties props;
|
||||
struct tlc59108_bl *data = kzalloc(sizeof(struct tlc59108_bl),
|
||||
@@ -104,6 +115,11 @@ static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id)
|
||||
|
||||
backlight_update_status(data->bl);
|
||||
|
||||
+ i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00);
|
||||
+ i2c_smbus_write_byte_data(data->client, TLC59108_PWM2, 0x80);
|
||||
+ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT1, 0x05);
|
||||
+ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT1, 0x15);
|
||||
+
|
||||
return 0;
|
||||
|
||||
err_reg:
|
||||
@@ -125,7 +141,7 @@ static int tlc59108_remove(struct i2c_client *c)
|
||||
}
|
||||
|
||||
/* I2C Device ID table */
|
||||
-static const struct i2c_device_id tlc59108_id[] = {
|
||||
+static struct i2c_device_id tlc59108_id[] = {
|
||||
{ "tlc59108", 0 },
|
||||
{ }
|
||||
};
|
||||
@@ -134,12 +150,12 @@ MODULE_DEVICE_TABLE(i2c, tlc59108_id);
|
||||
/* I2C driver data */
|
||||
static struct i2c_driver tlc59108_driver = {
|
||||
.driver = {
|
||||
- .owner = THIS_MODULE,
|
||||
- .name = tlc59108_MODULE_NAME,
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .name = "tlc59108"
|
||||
},
|
||||
+ .id_table = tlc59108_id,
|
||||
.probe = tlc59108_probe,
|
||||
.remove = tlc59108_remove,
|
||||
- .id_table = tlc59108_id,
|
||||
};
|
||||
|
||||
static int __init tlc59108_init(void)
|
||||
@@ -157,4 +173,4 @@ module_exit(tlc59108_exit);
|
||||
|
||||
MODULE_DESCRIPTION("LCD/Backlight control for TLC59108");
|
||||
MODULE_AUTHOR("Senthil Natarajan <senthil.n@ti.com>");
|
||||
-MODULE_LICENSE("GPL v2");
|
||||
+MODULE_LICENSE("GPL");
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
From 81ff7627ad0d958a5c156cb7d880af8707e14f47 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Holler <holler@ahsoftware.de>
|
||||
Date: Wed, 4 Jul 2012 00:03:04 +0200
|
||||
Subject: [PATCH 4/5] zeroMAP: Open your eyes!
|
||||
|
||||
Signed-off-by: Alexander Holler <holler@ahsoftware.de>
|
||||
---
|
||||
kernel/printk.c | 7 +++++++
|
||||
1 files changed, 7 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/kernel/printk.c b/kernel/printk.c
|
||||
index 22e070f..3678740 100644
|
||||
--- a/kernel/printk.c
|
||||
+++ b/kernel/printk.c
|
||||
@@ -1759,6 +1759,13 @@ static int __init console_setup(char *str)
|
||||
char *s, *options, *brl_options = NULL;
|
||||
int idx;
|
||||
|
||||
+#ifdef CONFIG_SERIAL_OMAP
|
||||
+ if (!strncmp(str, "tty0", 4) && '0' <= str[4] && '9' >= str[4]) {
|
||||
+ str[3] = 'O';
|
||||
+ pr_warn("We are opening your eyes, assuming you want to use an OMAP based serial driver and not a zeroMAP based one! ;)\n");
|
||||
+ pr_warn("Which means 'tty0%s' was changed to 'ttyO%s' automagically for your pleasure.\n", str+4, str+4);
|
||||
+ }
|
||||
+#endif
|
||||
#ifdef CONFIG_A11Y_BRAILLE_CONSOLE
|
||||
if (!memcmp(str, "brl,", 4)) {
|
||||
brl_options = "";
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
From f2ec859cb99e6137d78b457f8a6693e69e3b1f33 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Thu, 24 Jan 2013 09:43:51 -0600
|
||||
Subject: [PATCH 5/5] ARM: OMAP: Beagle: use TWL4030 generic reset script
|
||||
|
||||
Enable TWL_COMMON_PDATA_POWER such that OMAP3530 revisions of the
|
||||
Beagle (Bx/Cx) will not hang on reboot when running at 125 Mhz.
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index 5b57885..9a2c80b 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -831,7 +831,7 @@ static int __init omap3_beagle_i2c_init(void)
|
||||
{
|
||||
omap3_pmic_get_config(&beagle_twldata,
|
||||
TWL_COMMON_PDATA_USB | TWL_COMMON_PDATA_MADC |
|
||||
- TWL_COMMON_PDATA_AUDIO,
|
||||
+ TWL_COMMON_PDATA_AUDIO | TWL_COMMON_PDATA_POWER,
|
||||
TWL_COMMON_REGULATOR_VDAC | TWL_COMMON_REGULATOR_VPLL2);
|
||||
|
||||
beagle_twldata.vpll2->constraints.name = "VDVI";
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
From 40d889a09a05765138f3b737becadfe927c9b004 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Tue, 19 Mar 2013 13:40:50 -0500
|
||||
Subject: [PATCH 6/6] DSS2: use DSI PLL for DPI with OMAP3
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
drivers/video/omap2/dss/dpi.c | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
|
||||
index 757b57f..12ed14f 100644
|
||||
--- a/drivers/video/omap2/dss/dpi.c
|
||||
+++ b/drivers/video/omap2/dss/dpi.c
|
||||
@@ -58,10 +58,6 @@ static struct platform_device *dpi_get_dsidev(enum omap_channel channel)
|
||||
*/
|
||||
switch (omapdss_get_version()) {
|
||||
case OMAPDSS_VER_OMAP24xx:
|
||||
- case OMAPDSS_VER_OMAP34xx_ES1:
|
||||
- case OMAPDSS_VER_OMAP34xx_ES3:
|
||||
- case OMAPDSS_VER_OMAP3630:
|
||||
- case OMAPDSS_VER_AM35xx:
|
||||
return NULL;
|
||||
|
||||
case OMAPDSS_VER_OMAP4430_ES1:
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
From c070885eaf883884f89a77e2f71def5b447f914b Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Tue, 11 Dec 2012 06:25:27 -0600
|
||||
Subject: [PATCH 01/10] Beagle: expansion: add buddy param for expansionboard
|
||||
names
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 17 +++++++++++++++++
|
||||
1 file changed, 17 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index c3558f9..29d549c 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <linux/pwm.h>
|
||||
#include <linux/leds_pwm.h>
|
||||
#include <linux/gpio.h>
|
||||
+#include <linux/irq.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
#include <linux/opp.h>
|
||||
@@ -191,6 +192,8 @@ static void __init omap3_beagle_init_rev(void)
|
||||
}
|
||||
}
|
||||
|
||||
+char expansionboard_name[16];
|
||||
+
|
||||
static struct mtd_partition omap3beagle_nand_partitions[] = {
|
||||
/* All the partition sizes are listed in terms of NAND block size */
|
||||
{
|
||||
@@ -470,6 +473,18 @@ static struct omap_board_mux board_mux[] __initdata = {
|
||||
};
|
||||
#endif
|
||||
|
||||
+static int __init expansionboard_setup(char *str)
|
||||
+{
|
||||
+ if (!machine_is_omap3_beagle())
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!str)
|
||||
+ return -EINVAL;
|
||||
+ strncpy(expansionboard_name, str, 16);
|
||||
+ pr_info("Beagle expansionboard: %s\n", expansionboard_name);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int __init beagle_opp_init(void)
|
||||
{
|
||||
int r = 0;
|
||||
@@ -559,6 +574,8 @@ static void __init omap3_beagle_init(void)
|
||||
pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup));
|
||||
}
|
||||
|
||||
+early_param("buddy", expansionboard_setup);
|
||||
+
|
||||
MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
|
||||
/* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
|
||||
.atag_offset = 0x100,
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,242 @@
|
||||
From e71075202707e044a28604bd929fd6f7a89adeae Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Mon, 21 Jan 2013 11:47:02 -0600
|
||||
Subject: [PATCH 02/10] Beagle: expansion: add zippy
|
||||
|
||||
v2: add #include <linux/regulator/fixed.h>
|
||||
build fix from Pantelis Antoniou <panto@antoniou-consulting.com>
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 164 +++++++++++++++++++++++++++++--
|
||||
1 file changed, 158 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index 4e6e767..b3685ed 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <linux/usb/nop-usb-xceiv.h>
|
||||
|
||||
#include <linux/regulator/machine.h>
|
||||
+#include <linux/regulator/fixed.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
@@ -195,6 +196,86 @@ static void __init omap3_beagle_init_rev(void)
|
||||
|
||||
char expansionboard_name[16];
|
||||
|
||||
+enum {
|
||||
+ EXPANSION_MMC_NONE = 0,
|
||||
+ EXPANSION_MMC_ZIPPY,
|
||||
+ EXPANSION_MMC_WIFI,
|
||||
+};
|
||||
+
|
||||
+enum {
|
||||
+ EXPANSION_I2C_NONE = 0,
|
||||
+ EXPANSION_I2C_ZIPPY,
|
||||
+};
|
||||
+
|
||||
+static struct {
|
||||
+ int mmc_settings;
|
||||
+ int i2c_settings;
|
||||
+} expansion_config = {
|
||||
+ .mmc_settings = EXPANSION_MMC_NONE,
|
||||
+ .i2c_settings = EXPANSION_I2C_NONE,
|
||||
+};
|
||||
+
|
||||
+//rcn-ee: this is just a fake regulator, the zippy hardware provides 3.3/1.8 with jumper..
|
||||
+static struct fixed_voltage_config beagle_vzippy = {
|
||||
+ .supply_name = "vzippy",
|
||||
+ .microvolts = 3300000, /* 3.3V */
|
||||
+ .startup_delay = 70000, /* 70ms */
|
||||
+ .enable_high = 1,
|
||||
+ .enabled_at_boot = 0,
|
||||
+ .init_data = &beagle_vmmc2,
|
||||
+};
|
||||
+
|
||||
+static struct platform_device omap_zippy_device = {
|
||||
+ .name = "reg-fixed-voltage",
|
||||
+ .id = 1,
|
||||
+ .dev = {
|
||||
+ .platform_data = &beagle_vzippy,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+#define OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP 141
|
||||
+#define OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD 162
|
||||
+
|
||||
+#if IS_ENABLED(CONFIG_ENC28J60)
|
||||
+#include <linux/platform_data/spi-omap2-mcspi.h>
|
||||
+#include <linux/spi/spi.h>
|
||||
+
|
||||
+#define OMAP3BEAGLE_GPIO_ENC28J60_IRQ 157
|
||||
+
|
||||
+static struct omap2_mcspi_device_config enc28j60_spi_chip_info = {
|
||||
+ .turbo_mode = 0,
|
||||
+};
|
||||
+
|
||||
+static struct spi_board_info omap3beagle_zippy_spi_board_info[] __initdata = {
|
||||
+ {
|
||||
+ .modalias = "enc28j60",
|
||||
+ .bus_num = 4,
|
||||
+ .chip_select = 0,
|
||||
+ .max_speed_hz = 20000000,
|
||||
+ .controller_data = &enc28j60_spi_chip_info,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static void __init omap3beagle_enc28j60_init(void)
|
||||
+{
|
||||
+ if ((gpio_request(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, "ENC28J60_IRQ") == 0) &&
|
||||
+ (gpio_direction_input(OMAP3BEAGLE_GPIO_ENC28J60_IRQ) == 0)) {
|
||||
+ gpio_export(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, 0);
|
||||
+ omap3beagle_zippy_spi_board_info[0].irq = gpio_to_irq(OMAP3BEAGLE_GPIO_ENC28J60_IRQ);
|
||||
+ irq_set_irq_type(omap3beagle_zippy_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
|
||||
+ } else {
|
||||
+ pr_err("Beagle expansionboard: could not obtain gpio for ENC28J60_IRQ\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ spi_register_board_info(omap3beagle_zippy_spi_board_info,
|
||||
+ ARRAY_SIZE(omap3beagle_zippy_spi_board_info));
|
||||
+}
|
||||
+
|
||||
+#else
|
||||
+static inline void __init omap3beagle_enc28j60_init(void) { return; }
|
||||
+#endif
|
||||
+
|
||||
static struct mtd_partition omap3beagle_nand_partitions[] = {
|
||||
/* All the partition sizes are listed in terms of NAND block size */
|
||||
{
|
||||
@@ -271,6 +352,23 @@ static struct omap2_hsmmc_info mmc[] = {
|
||||
{} /* Terminator */
|
||||
};
|
||||
|
||||
+static struct omap2_hsmmc_info mmc_zippy[] = {
|
||||
+ {
|
||||
+ .mmc = 1,
|
||||
+ .caps = MMC_CAP_4_BIT_DATA,
|
||||
+ .gpio_wp = -EINVAL,
|
||||
+ .deferred = true,
|
||||
+ },
|
||||
+ {
|
||||
+ .mmc = 2,
|
||||
+ .caps = MMC_CAP_4_BIT_DATA,
|
||||
+ .gpio_wp = OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP,
|
||||
+ .gpio_cd = OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD,
|
||||
+ .transceiver = true,
|
||||
+ .deferred = true,
|
||||
+ },
|
||||
+ {} /* Terminator */
|
||||
+};
|
||||
static struct regulator_consumer_supply beagle_vmmc1_supply[] = {
|
||||
REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
|
||||
};
|
||||
@@ -301,10 +399,21 @@ static int beagle_twl_gpio_setup(struct device *dev,
|
||||
{
|
||||
int r;
|
||||
|
||||
- mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
|
||||
- /* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||
- mmc[0].gpio_cd = gpio + 0;
|
||||
- omap_hsmmc_late_init(mmc);
|
||||
+ switch (expansion_config.mmc_settings) {
|
||||
+ case EXPANSION_MMC_ZIPPY:
|
||||
+ mmc_zippy[0].gpio_wp = beagle_config.mmc1_gpio_wp;
|
||||
+ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||
+ mmc_zippy[0].gpio_cd = gpio + 0;
|
||||
+
|
||||
+ omap_hsmmc_late_init(mmc_zippy);
|
||||
+ break;
|
||||
+ default:
|
||||
+ mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
|
||||
+ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||
+ mmc[0].gpio_cd = gpio + 0;
|
||||
+
|
||||
+ omap_hsmmc_late_init(mmc);
|
||||
+ }
|
||||
|
||||
/*
|
||||
* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
|
||||
@@ -396,6 +505,14 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
|
||||
},
|
||||
};
|
||||
|
||||
+static struct i2c_board_info __initdata zippy_i2c2_rtc[] = {
|
||||
+#if defined(CONFIG_RTC_DRV_DS1307) || defined(CONFIG_RTC_DRV_DS1307_MODULE)
|
||||
+ {
|
||||
+ I2C_BOARD_INFO("ds1307", 0x68),
|
||||
+ },
|
||||
+#endif
|
||||
+};
|
||||
+
|
||||
static int __init omap3_beagle_i2c_init(void)
|
||||
{
|
||||
omap3_pmic_get_config(&beagle_twldata,
|
||||
@@ -406,6 +523,15 @@ static int __init omap3_beagle_i2c_init(void)
|
||||
beagle_twldata.vpll2->constraints.name = "VDVI";
|
||||
|
||||
omap3_pmic_init("twl4030", &beagle_twldata);
|
||||
+
|
||||
+ switch (expansion_config.i2c_settings) {
|
||||
+ case EXPANSION_I2C_ZIPPY:
|
||||
+ omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc));
|
||||
+ break;
|
||||
+ default:
|
||||
+ omap_register_i2c_bus(2, 400, NULL, 0);
|
||||
+ }
|
||||
+
|
||||
/* Bus 3 is attached to the DVI port where devices like the pico DLP
|
||||
* projector don't work reliably with 400kHz */
|
||||
omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom));
|
||||
@@ -548,10 +674,30 @@ static void __init omap3_beagle_init(void)
|
||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||
omap3_beagle_init_rev();
|
||||
|
||||
+ if (!strcmp(expansionboard_name, "zippy"))
|
||||
+ {
|
||||
+ pr_info("Beagle expansionboard: initializing zippy mmc\n");
|
||||
+ platform_device_register(&omap_zippy_device);
|
||||
+
|
||||
+ expansion_config.i2c_settings = EXPANSION_I2C_ZIPPY;
|
||||
+ expansion_config.mmc_settings = EXPANSION_MMC_ZIPPY;
|
||||
+
|
||||
+ omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP, OMAP_PIN_INPUT);
|
||||
+ omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT);
|
||||
+ }
|
||||
+
|
||||
if (gpio_is_valid(beagle_config.mmc1_gpio_wp))
|
||||
omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
|
||||
- mmc[0].caps = beagle_config.mmc_caps;
|
||||
- omap_hsmmc_init(mmc);
|
||||
+
|
||||
+ switch (expansion_config.mmc_settings) {
|
||||
+ case EXPANSION_MMC_ZIPPY:
|
||||
+ mmc_zippy[0].caps = beagle_config.mmc_caps;
|
||||
+ omap_hsmmc_init(mmc_zippy);
|
||||
+ break;
|
||||
+ default:
|
||||
+ mmc[0].caps = beagle_config.mmc_caps;
|
||||
+ omap_hsmmc_init(mmc);
|
||||
+ }
|
||||
|
||||
omap3_beagle_i2c_init();
|
||||
|
||||
@@ -566,6 +712,12 @@ static void __init omap3_beagle_init(void)
|
||||
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
|
||||
+ if (!strcmp(expansionboard_name, "zippy"))
|
||||
+ {
|
||||
+ pr_info("Beagle expansionboard: initializing enc28j60\n");
|
||||
+ omap3beagle_enc28j60_init();
|
||||
+ }
|
||||
+
|
||||
usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
|
||||
usb_musb_init(NULL);
|
||||
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
From 45bed17e65e1a83f753896e250f3458654dcb229 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Tue, 11 Dec 2012 06:32:15 -0600
|
||||
Subject: [PATCH 03/10] Beagle: expansion: add zippy2
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 48 ++++++++++++++++++++++++++++++-
|
||||
1 file changed, 47 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index b3685ed..74da505 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -276,6 +276,46 @@ static void __init omap3beagle_enc28j60_init(void)
|
||||
static inline void __init omap3beagle_enc28j60_init(void) { return; }
|
||||
#endif
|
||||
|
||||
+#if IS_ENABLED(CONFIG_KS8851)
|
||||
+#include <linux/platform_data/spi-omap2-mcspi.h>
|
||||
+#include <linux/spi/spi.h>
|
||||
+
|
||||
+#define OMAP3BEAGLE_GPIO_KS8851_IRQ 157
|
||||
+
|
||||
+static struct omap2_mcspi_device_config ks8851_spi_chip_info = {
|
||||
+ .turbo_mode = 0,
|
||||
+};
|
||||
+
|
||||
+static struct spi_board_info omap3beagle_zippy2_spi_board_info[] __initdata = {
|
||||
+ {
|
||||
+ .modalias = "ks8851",
|
||||
+ .bus_num = 4,
|
||||
+ .chip_select = 0,
|
||||
+ .max_speed_hz = 36000000,
|
||||
+ .controller_data = &ks8851_spi_chip_info,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static void __init omap3beagle_ks8851_init(void)
|
||||
+{
|
||||
+ if ((gpio_request(OMAP3BEAGLE_GPIO_KS8851_IRQ, "KS8851_IRQ") == 0) &&
|
||||
+ (gpio_direction_input(OMAP3BEAGLE_GPIO_KS8851_IRQ) == 0)) {
|
||||
+ gpio_export(OMAP3BEAGLE_GPIO_KS8851_IRQ, 0);
|
||||
+ omap3beagle_zippy2_spi_board_info[0].irq = gpio_to_irq(OMAP3BEAGLE_GPIO_KS8851_IRQ);
|
||||
+ irq_set_irq_type(omap3beagle_zippy2_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
|
||||
+ } else {
|
||||
+ pr_err("Beagle expansionboard: could not obtain gpio for KS8851_IRQ\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ spi_register_board_info(omap3beagle_zippy2_spi_board_info,
|
||||
+ ARRAY_SIZE(omap3beagle_zippy2_spi_board_info));
|
||||
+}
|
||||
+
|
||||
+#else
|
||||
+static inline void __init omap3beagle_ks8851_init(void) { return; }
|
||||
+#endif
|
||||
+
|
||||
static struct mtd_partition omap3beagle_nand_partitions[] = {
|
||||
/* All the partition sizes are listed in terms of NAND block size */
|
||||
{
|
||||
@@ -674,7 +714,7 @@ static void __init omap3_beagle_init(void)
|
||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||
omap3_beagle_init_rev();
|
||||
|
||||
- if (!strcmp(expansionboard_name, "zippy"))
|
||||
+ if ((!strcmp(expansionboard_name, "zippy")) || (!strcmp(expansionboard_name, "zippy2")))
|
||||
{
|
||||
pr_info("Beagle expansionboard: initializing zippy mmc\n");
|
||||
platform_device_register(&omap_zippy_device);
|
||||
@@ -718,6 +758,12 @@ static void __init omap3_beagle_init(void)
|
||||
omap3beagle_enc28j60_init();
|
||||
}
|
||||
|
||||
+ if (!strcmp(expansionboard_name, "zippy2"))
|
||||
+ {
|
||||
+ pr_info("Beagle expansionboard: initializing ks_8851\n");
|
||||
+ omap3beagle_ks8851_init();
|
||||
+ }
|
||||
+
|
||||
usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
|
||||
usb_musb_init(NULL);
|
||||
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
From 4d9b4e5795e322ed3efed9b8402f604e2e53cc6f Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Tue, 11 Dec 2012 06:33:24 -0600
|
||||
Subject: [PATCH 04/10] Beagle: expansion: add trainer
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 31 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 31 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index 74da505..b5ed547 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -764,6 +764,37 @@ static void __init omap3_beagle_init(void)
|
||||
omap3beagle_ks8851_init();
|
||||
}
|
||||
|
||||
+ if (!strcmp(expansionboard_name, "trainer"))
|
||||
+ {
|
||||
+ pr_info("Beagle expansionboard: exporting GPIOs 130-141,162 to userspace\n");
|
||||
+ gpio_request(130, "sysfs");
|
||||
+ gpio_export(130, 1);
|
||||
+ gpio_request(131, "sysfs");
|
||||
+ gpio_export(131, 1);
|
||||
+ gpio_request(132, "sysfs");
|
||||
+ gpio_export(132, 1);
|
||||
+ gpio_request(133, "sysfs");
|
||||
+ gpio_export(133, 1);
|
||||
+ gpio_request(134, "sysfs");
|
||||
+ gpio_export(134, 1);
|
||||
+ gpio_request(135, "sysfs");
|
||||
+ gpio_export(135, 1);
|
||||
+ gpio_request(136, "sysfs");
|
||||
+ gpio_export(136, 1);
|
||||
+ gpio_request(137, "sysfs");
|
||||
+ gpio_export(137, 1);
|
||||
+ gpio_request(138, "sysfs");
|
||||
+ gpio_export(138, 1);
|
||||
+ gpio_request(139, "sysfs");
|
||||
+ gpio_export(139, 1);
|
||||
+ gpio_request(140, "sysfs");
|
||||
+ gpio_export(140, 1);
|
||||
+ gpio_request(141, "sysfs");
|
||||
+ gpio_export(141, 1);
|
||||
+ gpio_request(162, "sysfs");
|
||||
+ gpio_export(162, 1);
|
||||
+ }
|
||||
+
|
||||
usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
|
||||
usb_musb_init(NULL);
|
||||
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,285 @@
|
||||
From a53e7913a95faefde1ee87a7ea048c04b0850066 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Tue, 11 Dec 2012 06:42:03 -0600
|
||||
Subject: [PATCH 05/10] Beagle: expansion: add CircuitCo ulcd Support
|
||||
|
||||
This of a cleanup, squashed both ulcd commits into one:
|
||||
|
||||
======================================================================
|
||||
|
||||
expansion: add ulcd
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
|
||||
======================================================================
|
||||
|
||||
beagleboard: fix uLCD7 support
|
||||
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
|
||||
|
||||
======================================================================
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 136 ++++++++++++++++++++++
|
||||
drivers/video/omap2/displays/panel-generic-dpi.c | 27 +++++
|
||||
2 files changed, 163 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index 0f9b253..b2807c2 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -118,12 +118,16 @@ static struct {
|
||||
int dvi_pd_gpio;
|
||||
int usr_button_gpio;
|
||||
int mmc_caps;
|
||||
+ char *lcd_driver_name;
|
||||
+ int lcd_pwren;
|
||||
} beagle_config = {
|
||||
.mmc1_gpio_wp = -EINVAL,
|
||||
.usb_pwr_level = 0,
|
||||
.dvi_pd_gpio = -EINVAL,
|
||||
.usr_button_gpio = 4,
|
||||
.mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
||||
+ .lcd_driver_name = "",
|
||||
+ .lcd_pwren = 156,
|
||||
};
|
||||
|
||||
static struct gpio omap3_beagle_rev_gpios[] __initdata = {
|
||||
@@ -195,6 +199,7 @@ static void __init omap3_beagle_init_rev(void)
|
||||
}
|
||||
|
||||
char expansionboard_name[16];
|
||||
+char expansionboard2_name[16];
|
||||
|
||||
enum {
|
||||
EXPANSION_MMC_NONE = 0,
|
||||
@@ -205,6 +210,7 @@ enum {
|
||||
enum {
|
||||
EXPANSION_I2C_NONE = 0,
|
||||
EXPANSION_I2C_ZIPPY,
|
||||
+ EXPANSION_I2C_7ULCD,
|
||||
};
|
||||
|
||||
static struct {
|
||||
@@ -369,9 +375,53 @@ static struct omap_dss_device beagle_tv_device = {
|
||||
.phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
|
||||
};
|
||||
|
||||
+static int beagle_enable_lcd(struct omap_dss_device *dssdev)
|
||||
+{
|
||||
+ if (gpio_is_valid(beagle_config.lcd_pwren)) {
|
||||
+ pr_info("%s: Enabling LCD\n", __FUNCTION__);
|
||||
+ gpio_set_value(beagle_config.lcd_pwren, 0);
|
||||
+ } else {
|
||||
+ pr_info("%s: Invalid LCD enable GPIO: %d\n",
|
||||
+ __FUNCTION__, beagle_config.lcd_pwren);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void beagle_disable_lcd(struct omap_dss_device *dssdev)
|
||||
+{
|
||||
+ if (gpio_is_valid(beagle_config.lcd_pwren)) {
|
||||
+ pr_info("%s: Disabling LCD\n", __FUNCTION__);
|
||||
+ gpio_set_value(beagle_config.lcd_pwren, 1);
|
||||
+ } else {
|
||||
+ pr_info("%s: Invalid LCD enable GPIO: %d\n",
|
||||
+ __FUNCTION__, beagle_config.lcd_pwren);
|
||||
+ }
|
||||
+
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+static struct panel_generic_dpi_data lcd_panel = {
|
||||
+ .name = "tfc_s9700rtwv35tr-01b",
|
||||
+ .platform_enable = beagle_enable_lcd,
|
||||
+ .platform_disable = beagle_disable_lcd,
|
||||
+};
|
||||
+
|
||||
+static struct omap_dss_device beagle_lcd_device = {
|
||||
+ .type = OMAP_DISPLAY_TYPE_DPI,
|
||||
+ .name = "lcd",
|
||||
+ .driver_name = "generic_dpi_panel",
|
||||
+ .phy.dpi.data_lines = 24,
|
||||
+ .platform_enable = beagle_enable_lcd,
|
||||
+ .platform_disable = beagle_disable_lcd,
|
||||
+ .reset_gpio = -EINVAL,
|
||||
+ .data = &lcd_panel,
|
||||
+};
|
||||
+
|
||||
static struct omap_dss_device *beagle_dss_devices[] = {
|
||||
&beagle_dvi_device,
|
||||
&beagle_tv_device,
|
||||
+ &beagle_lcd_device,
|
||||
};
|
||||
|
||||
static struct omap_dss_board_info beagle_dss_data = {
|
||||
@@ -553,6 +603,53 @@ static struct i2c_board_info __initdata zippy_i2c2_rtc[] = {
|
||||
#endif
|
||||
};
|
||||
|
||||
+#if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
|
||||
+/* Touchscreen */
|
||||
+#include <linux/i2c/tsc2007.h>
|
||||
+
|
||||
+#define OMAP3BEAGLE_TSC2007_GPIO 157
|
||||
+
|
||||
+static int omap3beagle_tsc2007_get_pendown_state(void)
|
||||
+{
|
||||
+ return !gpio_get_value(OMAP3BEAGLE_TSC2007_GPIO);
|
||||
+}
|
||||
+
|
||||
+static struct tsc2007_platform_data tsc2007_info = {
|
||||
+ .model = 2007,
|
||||
+ .x_plate_ohms = 180,
|
||||
+ .get_pendown_state = omap3beagle_tsc2007_get_pendown_state,
|
||||
+};
|
||||
+
|
||||
+static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {
|
||||
+ {
|
||||
+ I2C_BOARD_INFO("tlc59108", 0x40),
|
||||
+ },
|
||||
+ {
|
||||
+ I2C_BOARD_INFO("tsc2007", 0x48),
|
||||
+ .platform_data = &tsc2007_info,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static void __init omap3beagle_tsc2007_init(void)
|
||||
+{
|
||||
+ int r;
|
||||
+
|
||||
+ omap_mux_init_gpio(OMAP3BEAGLE_TSC2007_GPIO, OMAP_PIN_INPUT_PULLUP);
|
||||
+
|
||||
+ r = gpio_request_one(OMAP3BEAGLE_TSC2007_GPIO, GPIOF_IN, "tsc2007_pen_down");
|
||||
+ if (r < 0) {
|
||||
+ pr_err("Beagle expansionboard: failed to request GPIO#%d for "
|
||||
+ "tsc2007 pen down IRQ\n", OMAP3BEAGLE_TSC2007_GPIO);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ beagle_i2c2_bbtoys_ulcd[0].irq = gpio_to_irq(OMAP3BEAGLE_TSC2007_GPIO);
|
||||
+ irq_set_irq_type(gpio_to_irq(OMAP3BEAGLE_TSC2007_GPIO), IRQ_TYPE_EDGE_FALLING);
|
||||
+}
|
||||
+#else
|
||||
+static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {};
|
||||
+#endif
|
||||
+
|
||||
static int __init omap3_beagle_i2c_init(void)
|
||||
{
|
||||
omap3_pmic_get_config(&beagle_twldata,
|
||||
@@ -565,6 +662,10 @@ static int __init omap3_beagle_i2c_init(void)
|
||||
omap3_pmic_init("twl4030", &beagle_twldata);
|
||||
|
||||
switch (expansion_config.i2c_settings) {
|
||||
+ case EXPANSION_I2C_7ULCD:
|
||||
+ omap_register_i2c_bus(2, 400, beagle_i2c2_bbtoys_ulcd,
|
||||
+ ARRAY_SIZE(beagle_i2c2_bbtoys_ulcd));
|
||||
+ break;
|
||||
case EXPANSION_I2C_ZIPPY:
|
||||
omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc));
|
||||
break;
|
||||
@@ -661,6 +762,18 @@ static int __init expansionboard_setup(char *str)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int __init expansionboard2_setup(char *str)
|
||||
+{
|
||||
+ if (!machine_is_omap3_beagle())
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!str)
|
||||
+ return -EINVAL;
|
||||
+ strncpy(expansionboard2_name, str, 16);
|
||||
+ pr_info("Beagle expansionboard2: %s\n", expansionboard2_name);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int __init beagle_opp_init(void)
|
||||
{
|
||||
int r = 0;
|
||||
@@ -726,6 +839,20 @@ static void __init omap3_beagle_init(void)
|
||||
omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT);
|
||||
}
|
||||
|
||||
+ if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
|
||||
+ {
|
||||
+ int r;
|
||||
+ expansion_config.i2c_settings = EXPANSION_I2C_7ULCD;
|
||||
+
|
||||
+ /* TODO: set lcd_driver_name by command line or device tree */
|
||||
+ beagle_config.lcd_driver_name = "tfc_s9700rtwv35tr-01b",
|
||||
+ lcd_panel.name = beagle_config.lcd_driver_name;
|
||||
+
|
||||
+ r = gpio_request_one(beagle_config.lcd_pwren, GPIOF_OUT_INIT_LOW, "LCD power");
|
||||
+ if (r < 0)
|
||||
+ pr_err("Beagle expansionboard: Unable to get LCD power enable GPIO\n");
|
||||
+ }
|
||||
+
|
||||
if (gpio_is_valid(beagle_config.mmc1_gpio_wp))
|
||||
omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
|
||||
|
||||
@@ -795,6 +922,14 @@ static void __init omap3_beagle_init(void)
|
||||
gpio_export(162, 1);
|
||||
}
|
||||
|
||||
+ if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
|
||||
+ {
|
||||
+ #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
|
||||
+ pr_info("Beagle expansionboard: initializing touchscreen: tsc2007\n");
|
||||
+ omap3beagle_tsc2007_init();
|
||||
+ #endif
|
||||
+ }
|
||||
+
|
||||
usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
|
||||
usb_musb_init(NULL);
|
||||
|
||||
@@ -816,6 +951,7 @@ static void __init omap3_beagle_init(void)
|
||||
}
|
||||
|
||||
early_param("buddy", expansionboard_setup);
|
||||
+early_param("buddy2", expansionboard2_setup);
|
||||
|
||||
MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
|
||||
/* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
|
||||
diff --git a/drivers/video/omap2/displays/panel-generic-dpi.c b/drivers/video/omap2/displays/panel-generic-dpi.c
|
||||
index 97363f7..614031f 100644
|
||||
--- a/drivers/video/omap2/displays/panel-generic-dpi.c
|
||||
+++ b/drivers/video/omap2/displays/panel-generic-dpi.c
|
||||
@@ -515,6 +515,33 @@ static struct panel_config generic_dpi_panels[] = {
|
||||
},
|
||||
.name = "primeview_pd104slf",
|
||||
},
|
||||
+
|
||||
+ /* ThreeFiveCorp S9700RTWV35TR-01B */
|
||||
+ {
|
||||
+ {
|
||||
+ .x_res = 800,
|
||||
+ .y_res = 480,
|
||||
+
|
||||
+ .pixel_clock = 30000,
|
||||
+
|
||||
+ .hsw = 49,
|
||||
+ .hfp = 41,
|
||||
+ .hbp = 40,
|
||||
+
|
||||
+ .vsw = 4,
|
||||
+ .vfp = 14,
|
||||
+ .vbp = 29,
|
||||
+
|
||||
+ .vsync_level = OMAPDSS_SIG_ACTIVE_LOW,
|
||||
+ .hsync_level = OMAPDSS_SIG_ACTIVE_LOW,
|
||||
+ .data_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE,
|
||||
+ .de_level = OMAPDSS_SIG_ACTIVE_HIGH,
|
||||
+ .sync_pclk_edge = OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
|
||||
+ },
|
||||
+ .power_on_delay = 50,
|
||||
+ .power_off_delay = 100,
|
||||
+ .name = "tfc_s9700rtwv35tr-01b",
|
||||
+ },
|
||||
};
|
||||
|
||||
struct panel_drv_data {
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,180 @@
|
||||
From f78cd93d767cd75969c4661723cfce46071e5b1b Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Tue, 11 Dec 2012 06:48:52 -0600
|
||||
Subject: [PATCH 06/10] Beagle: expansion: add wifi
|
||||
|
||||
build fixes from Pantelis Antoniou <panto@antoniou-consulting.com>
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 119 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 119 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index a8de97e..2322d6c 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -221,6 +221,73 @@ static struct {
|
||||
.i2c_settings = EXPANSION_I2C_NONE,
|
||||
};
|
||||
|
||||
+#if IS_ENABLED(CONFIG_WL12XX)
|
||||
+#include <linux/regulator/fixed.h>
|
||||
+#include <linux/ti_wilink_st.h>
|
||||
+#include <linux/wl12xx.h>
|
||||
+
|
||||
+#define OMAP_BEAGLE_WLAN_EN_GPIO (139)
|
||||
+#define OMAP_BEAGLE_BT_EN_GPIO (138)
|
||||
+#define OMAP_BEAGLE_WLAN_IRQ_GPIO (137)
|
||||
+#define OMAP_BEAGLE_FM_EN_BT_WU (136)
|
||||
+
|
||||
+struct wl12xx_platform_data omap_beagle_wlan_data __initdata = {
|
||||
+ .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */
|
||||
+};
|
||||
+
|
||||
+static struct ti_st_plat_data wilink_platform_data = {
|
||||
+ .nshutdown_gpio = OMAP_BEAGLE_BT_EN_GPIO,
|
||||
+ .dev_name = "/dev/ttyO1",
|
||||
+ .flow_cntrl = 1,
|
||||
+ .baud_rate = 3000000,
|
||||
+ .chip_enable = NULL,
|
||||
+ .suspend = NULL,
|
||||
+ .resume = NULL,
|
||||
+};
|
||||
+
|
||||
+static struct platform_device wl12xx_device = {
|
||||
+ .name = "kim",
|
||||
+ .id = -1,
|
||||
+ .dev.platform_data = &wilink_platform_data,
|
||||
+};
|
||||
+
|
||||
+static struct platform_device btwilink_device = {
|
||||
+ .name = "btwilink",
|
||||
+ .id = -1,
|
||||
+};
|
||||
+#endif
|
||||
+
|
||||
+static struct regulator_consumer_supply beagle_vmmc2_supply =
|
||||
+ REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
|
||||
+
|
||||
+static struct regulator_init_data beagle_vmmc2 = {
|
||||
+ .constraints = {
|
||||
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||
+ },
|
||||
+ .num_consumer_supplies = 1,
|
||||
+ .consumer_supplies = &beagle_vmmc2_supply,
|
||||
+};
|
||||
+
|
||||
+#if IS_ENABLED(CONFIG_WL12XX)
|
||||
+static struct fixed_voltage_config beagle_vwlan = {
|
||||
+ .supply_name = "vwl1271",
|
||||
+ .microvolts = 1800000, /* 1.8V */
|
||||
+ .gpio = OMAP_BEAGLE_WLAN_EN_GPIO,
|
||||
+ .startup_delay = 70000, /* 70ms */
|
||||
+ .enable_high = 1,
|
||||
+ .enabled_at_boot = 0,
|
||||
+ .init_data = &beagle_vmmc2,
|
||||
+};
|
||||
+
|
||||
+static struct platform_device omap_vwlan_device = {
|
||||
+ .name = "reg-fixed-voltage",
|
||||
+ .id = 1,
|
||||
+ .dev = {
|
||||
+ .platform_data = &beagle_vwlan,
|
||||
+ },
|
||||
+};
|
||||
+#endif
|
||||
+
|
||||
//rcn-ee: this is just a fake regulator, the zippy hardware provides 3.3/1.8 with jumper..
|
||||
static struct fixed_voltage_config beagle_vzippy = {
|
||||
.supply_name = "vzippy",
|
||||
@@ -459,6 +526,26 @@ static struct omap2_hsmmc_info mmc_zippy[] = {
|
||||
},
|
||||
{} /* Terminator */
|
||||
};
|
||||
+
|
||||
+static struct omap2_hsmmc_info mmcbbt[] = {
|
||||
+ {
|
||||
+ .mmc = 1,
|
||||
+ .caps = MMC_CAP_4_BIT_DATA,
|
||||
+ .gpio_wp = -EINVAL,
|
||||
+ .deferred = true,
|
||||
+ },
|
||||
+ {
|
||||
+ .name = "wl1271",
|
||||
+ .mmc = 2,
|
||||
+ .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
|
||||
+ .gpio_wp = -EINVAL,
|
||||
+ .gpio_cd = -EINVAL,
|
||||
+ .ocr_mask = MMC_VDD_165_195,
|
||||
+ .nonremovable = true,
|
||||
+ },
|
||||
+ {} /* Terminator */
|
||||
+};
|
||||
+
|
||||
static struct regulator_consumer_supply beagle_vmmc1_supply[] = {
|
||||
REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
|
||||
};
|
||||
@@ -490,6 +577,13 @@ static int beagle_twl_gpio_setup(struct device *dev,
|
||||
int r;
|
||||
|
||||
switch (expansion_config.mmc_settings) {
|
||||
+ case EXPANSION_MMC_WIFI:
|
||||
+ mmcbbt[0].gpio_wp = beagle_config.mmc1_gpio_wp;
|
||||
+ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||
+ mmcbbt[0].gpio_cd = gpio + 0;
|
||||
+
|
||||
+ omap_hsmmc_late_init(mmcbbt);
|
||||
+ break;
|
||||
case EXPANSION_MMC_ZIPPY:
|
||||
mmc_zippy[0].gpio_wp = beagle_config.mmc1_gpio_wp;
|
||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||
@@ -839,6 +933,13 @@ static void __init omap3_beagle_init(void)
|
||||
omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT);
|
||||
}
|
||||
|
||||
+ if (!strcmp(expansionboard_name, "bbtoys-wifi"))
|
||||
+ {
|
||||
+ #if IS_ENABLED(CONFIG_WL12XX)
|
||||
+ expansion_config.mmc_settings = EXPANSION_MMC_WIFI;
|
||||
+ #endif
|
||||
+ }
|
||||
+
|
||||
if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
|
||||
{
|
||||
int r;
|
||||
@@ -857,6 +958,10 @@ static void __init omap3_beagle_init(void)
|
||||
omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
|
||||
|
||||
switch (expansion_config.mmc_settings) {
|
||||
+ case EXPANSION_MMC_WIFI:
|
||||
+ mmcbbt[0].caps = beagle_config.mmc_caps;
|
||||
+ omap_hsmmc_init(mmcbbt);
|
||||
+ break;
|
||||
case EXPANSION_MMC_ZIPPY:
|
||||
mmc_zippy[0].caps = beagle_config.mmc_caps;
|
||||
omap_hsmmc_init(mmc_zippy);
|
||||
@@ -922,6 +1027,20 @@ static void __init omap3_beagle_init(void)
|
||||
gpio_export(162, 1);
|
||||
}
|
||||
|
||||
+ if (!strcmp(expansionboard_name, "bbtoys-wifi"))
|
||||
+ {
|
||||
+ #if IS_ENABLED(CONFIG_WL12XX)
|
||||
+ omap_beagle_wlan_data.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO);
|
||||
+ if (wl12xx_set_platform_data(&omap_beagle_wlan_data))
|
||||
+ pr_err("error setting wl12xx data\n");
|
||||
+ pr_info("Beagle expansionboard: registering wl12xx bt platform device\n");
|
||||
+ platform_device_register(&wl12xx_device);
|
||||
+ platform_device_register(&btwilink_device);
|
||||
+ pr_info("Beagle expansionboard: registering wl12xx wifi platform device\n");
|
||||
+ platform_device_register(&omap_vwlan_device);
|
||||
+ #endif
|
||||
+ }
|
||||
+
|
||||
if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
From 0c361e9db10f9ec3598bf062a605a451857ee06e Mon Sep 17 00:00:00 2001
|
||||
From: Bas van der Doorn <bas@doornvd.com>
|
||||
Date: Tue, 11 Dec 2012 06:52:22 -0600
|
||||
Subject: [PATCH 07/10] Beagle: expansion: add beaglefpga
|
||||
|
||||
Added SPI dev and McBSP 3 mux when FPGA is detected
|
||||
|
||||
Signed-off-by: Bas van der Doorn <bas@doornvd.com>
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 76 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 76 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index 2322d6c..c257f3c 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -44,6 +44,7 @@
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/flash.h>
|
||||
+#include <linux/spi/spi.h>
|
||||
|
||||
#include <video/omapdss.h>
|
||||
#include <video/omap-panel-data.h>
|
||||
@@ -916,6 +917,68 @@ static int __init beagle_opp_init(void)
|
||||
}
|
||||
omap_device_initcall(beagle_opp_init);
|
||||
|
||||
+static void __init omap3_beagle_config_mcspi3_mux(void)
|
||||
+{
|
||||
+ /* NOTE: Clock pins need to be in input mode */
|
||||
+ omap_mux_init_signal("sdmmc2_clk.mcspi3_clk", OMAP_PIN_INPUT);
|
||||
+ omap_mux_init_signal("sdmmc2_cmd.mcspi3_simo", OMAP_PIN_OUTPUT);
|
||||
+ omap_mux_init_signal("sdmmc2_dat0.mcspi3_somi", OMAP_PIN_INPUT_PULLUP);
|
||||
+ omap_mux_init_signal("sdmmc2_dat2.mcspi3_cs1", OMAP_PIN_OUTPUT);
|
||||
+ omap_mux_init_signal("sdmmc2_dat3.mcspi3_cs0", OMAP_PIN_OUTPUT);
|
||||
+}
|
||||
+
|
||||
+static void __init omap3_beagle_config_mcspi4_mux(void)
|
||||
+{
|
||||
+ /* NOTE: Clock pins need to be in input mode */
|
||||
+ omap_mux_init_signal("mcbsp1_clkr.mcspi4_clk", OMAP_PIN_INPUT);
|
||||
+ omap_mux_init_signal("mcbsp1_dx.mcspi4_simo", OMAP_PIN_OUTPUT);
|
||||
+ omap_mux_init_signal("mcbsp1_dr.mcspi4_somi", OMAP_PIN_INPUT_PULLUP);
|
||||
+ omap_mux_init_signal("mcbsp1_fsx.mcspi4_cs0", OMAP_PIN_OUTPUT);
|
||||
+}
|
||||
+
|
||||
+static void __init omap3_beagle_config_mcbsp3_mux(void)
|
||||
+{
|
||||
+ omap_mux_init_signal("mcbsp3_fsx.uart2_rx", OMAP_PIN_INPUT);
|
||||
+ omap_mux_init_signal("uart2_cts.mcbsp3_dx", OMAP_PIN_OUTPUT);
|
||||
+ omap_mux_init_signal("uart2_rts.mcbsp3_dr", OMAP_PIN_INPUT);
|
||||
+ /* NOTE: Clock pins need to be in input mode */
|
||||
+ omap_mux_init_signal("uart2_tx.mcbsp3_clkx", OMAP_PIN_INPUT);
|
||||
+}
|
||||
+
|
||||
+static void __init omap3_beagle_config_fpga_mux(void)
|
||||
+{
|
||||
+ omap3_beagle_config_mcbsp3_mux();
|
||||
+ omap3_beagle_config_mcspi3_mux();
|
||||
+ omap3_beagle_config_mcspi4_mux();
|
||||
+}
|
||||
+
|
||||
+static struct spi_board_info beagle_mcspi_board_info[] = {
|
||||
+ /* spi 3.0 */
|
||||
+ {
|
||||
+ .modalias = "spidev",
|
||||
+ .max_speed_hz = 48000000, //48 Mbps
|
||||
+ .bus_num = 3,
|
||||
+ .chip_select = 0,
|
||||
+ .mode = SPI_MODE_1,
|
||||
+ },
|
||||
+ /* spi 3.1 */
|
||||
+ {
|
||||
+ .modalias = "spidev",
|
||||
+ .max_speed_hz = 48000000, //48 Mbps
|
||||
+ .bus_num = 3,
|
||||
+ .chip_select = 1,
|
||||
+ .mode = SPI_MODE_1,
|
||||
+ },
|
||||
+ /* spi 4.0 */
|
||||
+ {
|
||||
+ .modalias = "spidev",
|
||||
+ .max_speed_hz = 48000000, //48 Mbps
|
||||
+ .bus_num = 4,
|
||||
+ .chip_select = 0,
|
||||
+ .mode = SPI_MODE_1,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
static void __init omap3_beagle_init(void)
|
||||
{
|
||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||
@@ -1041,6 +1104,19 @@ static void __init omap3_beagle_init(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
+ if (!strcmp(expansionboard_name, "beaglefpga"))
|
||||
+ {
|
||||
+ #if IS_ENABLED(CONFIG_SPI_SPIDEV)
|
||||
+ pr_info("Beagle expansionboard: enabling SPIdev for McSPI3/4 and pin muxing for McBSP3 slave mode\n");
|
||||
+
|
||||
+ /* FPGA pin settings configure McSPI 3, McSPI 4 and McBSP 3 */
|
||||
+ omap3_beagle_config_fpga_mux();
|
||||
+
|
||||
+ /* register McSPI 3 and McSPI 4 for FPGA programming and control */
|
||||
+ spi_register_board_info(beagle_mcspi_board_info, ARRAY_SIZE(beagle_mcspi_board_info));
|
||||
+ #endif
|
||||
+ }
|
||||
+
|
||||
if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
From 5258354e6e4d0b55334099868668a166d967c1d2 Mon Sep 17 00:00:00 2001
|
||||
From: Russell Hay <russell.hay@gmail.com>
|
||||
Date: Tue, 11 Dec 2012 06:53:58 -0600
|
||||
Subject: [PATCH 08/10] Beagle: expansion: add spidev
|
||||
|
||||
Signed-off-by: Russell Hay <russell.hay@gmail.com>
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index c257f3c..3e0313ee 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -1117,6 +1117,16 @@ static void __init omap3_beagle_init(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
+ if (!strcmp(expansionboard_name, "spidev"))
|
||||
+ {
|
||||
+ #if IS_ENABLED(CONFIG_SPI_SPIDEV)
|
||||
+ pr_info("Beagle expansionboard: registering spidev\n");
|
||||
+ omap3_beagle_config_mcspi3_mux();
|
||||
+ omap3_beagle_config_mcspi4_mux();
|
||||
+ spi_register_board_info(beagle_mcspi_board_info, ARRAY_SIZE(beagle_mcspi_board_info));
|
||||
+ #endif
|
||||
+ }
|
||||
+
|
||||
if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,217 @@
|
||||
From cc6ced0a1cbaea65a507ec3fe543a5b98d760d23 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Tue, 11 Dec 2012 06:58:15 -0600
|
||||
Subject: [PATCH 09/10] Beagle: expansion: add Aptina li5m03 camera
|
||||
|
||||
Based on:
|
||||
https://github.com/Aptina/BeagleBoard-xM/blob/master/tools/0266-Adding-MT9P031-Support-files.patch
|
||||
|
||||
And on Max Galemin's patch
|
||||
https://github.com/MaxGalemin/buildroot/blob/master/board/beagleboard/xm/kernel-patches/linux-0003-Add-support-for-MT9P031-Aptina-image-sensor-driver.patch
|
||||
|
||||
And Koen Kooi Previous work's
|
||||
https://github.com/beagleboard/kernel/blob/beagleboard-3.2/patches/camera/0003-beagleboard-fix-i2c2-init.patch
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 142 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 142 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index 3e0313ee..4fb5eae 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -201,6 +201,7 @@ static void __init omap3_beagle_init_rev(void)
|
||||
|
||||
char expansionboard_name[16];
|
||||
char expansionboard2_name[16];
|
||||
+char camera_name[16];
|
||||
|
||||
enum {
|
||||
EXPANSION_MMC_NONE = 0,
|
||||
@@ -555,6 +556,14 @@ static struct regulator_consumer_supply beagle_vsim_supply[] = {
|
||||
REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.0"),
|
||||
};
|
||||
|
||||
+static struct regulator_consumer_supply beagle_vaux3_supply = {
|
||||
+ .supply = "cam_1v8",
|
||||
+};
|
||||
+
|
||||
+static struct regulator_consumer_supply beagle_vaux4_supply = {
|
||||
+ .supply = "cam_2v8",
|
||||
+};
|
||||
+
|
||||
static struct gpio_led gpio_leds[];
|
||||
|
||||
/* PHY's VCC regulator might be added later, so flag that we need it */
|
||||
@@ -677,11 +686,43 @@ static struct regulator_init_data beagle_vsim = {
|
||||
.consumer_supplies = beagle_vsim_supply,
|
||||
};
|
||||
|
||||
+/* VAUX3 for CAM_1V8 */
|
||||
+static struct regulator_init_data beagle_vaux3 = {
|
||||
+ .constraints = {
|
||||
+ .min_uV = 1800000,
|
||||
+ .max_uV = 1800000,
|
||||
+ .apply_uV = true,
|
||||
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
+ | REGULATOR_MODE_STANDBY,
|
||||
+ .valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||
+ | REGULATOR_CHANGE_STATUS,
|
||||
+ },
|
||||
+ .num_consumer_supplies = 1,
|
||||
+ .consumer_supplies = &beagle_vaux3_supply,
|
||||
+};
|
||||
+
|
||||
+/* VAUX4 for CAM_2V8 */
|
||||
+static struct regulator_init_data beagle_vaux4 = {
|
||||
+ .constraints = {
|
||||
+ .min_uV = 1800000,
|
||||
+ .max_uV = 1800000,
|
||||
+ .apply_uV = true,
|
||||
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
+ | REGULATOR_MODE_STANDBY,
|
||||
+ .valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||
+ | REGULATOR_CHANGE_STATUS,
|
||||
+ },
|
||||
+ .num_consumer_supplies = 1,
|
||||
+ .consumer_supplies = &beagle_vaux4_supply,
|
||||
+};
|
||||
+
|
||||
static struct twl4030_platform_data beagle_twldata = {
|
||||
/* platform_data for children goes here */
|
||||
.gpio = &beagle_gpio_data,
|
||||
.vmmc1 = &beagle_vmmc1,
|
||||
.vsim = &beagle_vsim,
|
||||
+ .vaux3 = &beagle_vaux3,
|
||||
+ .vaux4 = &beagle_vaux4,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
|
||||
@@ -745,6 +786,61 @@ static void __init omap3beagle_tsc2007_init(void)
|
||||
static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {};
|
||||
#endif
|
||||
|
||||
+#if IS_ENABLED(CONFIG_VIDEO_MT9P031)
|
||||
+/* needed for: omap3_beagle_late_initcall */
|
||||
+#include "devices.h"
|
||||
+#include <media/omap3isp.h>
|
||||
+#include <media/mt9p031.h>
|
||||
+/* needed for: v4l2_dev_to_isp_device */
|
||||
+#include "../../../drivers/media/platform/omap3isp/isp.h"
|
||||
+
|
||||
+#define MT9P031_RESET_GPIO 98
|
||||
+#define MT9P031_EXT_FREQ 21000000
|
||||
+#define MT9P031_TARGET_FREQ 48000000
|
||||
+
|
||||
+#define MT9P031_I2C_ADDR 0x48
|
||||
+#define MT9P031_I2C_BUS 2
|
||||
+
|
||||
+static struct regulator *reg_1v8, *reg_2v8;
|
||||
+
|
||||
+static struct mt9p031_platform_data beagle_mt9p031_platform_data = {
|
||||
+ .reset = MT9P031_RESET_GPIO,
|
||||
+ .ext_freq = MT9P031_EXT_FREQ,
|
||||
+ .target_freq = MT9P031_TARGET_FREQ,
|
||||
+};
|
||||
+
|
||||
+static struct i2c_board_info mt9p031_camera_i2c_device = {
|
||||
+ I2C_BOARD_INFO("mt9p031", MT9P031_I2C_ADDR),
|
||||
+ .platform_data = &beagle_mt9p031_platform_data,
|
||||
+};
|
||||
+
|
||||
+static struct isp_subdev_i2c_board_info mt9p031_camera_subdevs[] = {
|
||||
+ {
|
||||
+ .board_info = &mt9p031_camera_i2c_device,
|
||||
+ .i2c_adapter_id = MT9P031_I2C_BUS,
|
||||
+ },
|
||||
+ { NULL, 0, },
|
||||
+};
|
||||
+
|
||||
+static struct isp_v4l2_subdevs_group beagle_camera_subdevs[] = {
|
||||
+ {
|
||||
+ .subdevs = mt9p031_camera_subdevs,
|
||||
+ .interface = ISP_INTERFACE_PARALLEL,
|
||||
+ .bus = {
|
||||
+ .parallel = {
|
||||
+ .data_lane_shift = 0,
|
||||
+ .clk_pol = 1,
|
||||
+ }
|
||||
+ },
|
||||
+ },
|
||||
+ { },
|
||||
+};
|
||||
+
|
||||
+static struct isp_platform_data beagle_isp_platform_data = {
|
||||
+ .subdevs = beagle_camera_subdevs,
|
||||
+};
|
||||
+#endif
|
||||
+
|
||||
static int __init omap3_beagle_i2c_init(void)
|
||||
{
|
||||
omap3_pmic_get_config(&beagle_twldata,
|
||||
@@ -869,6 +965,18 @@ static int __init expansionboard2_setup(char *str)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int __init camera_setup(char *str)
|
||||
+{
|
||||
+ if (!machine_is_omap3_beagle())
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!str)
|
||||
+ return -EINVAL;
|
||||
+ strncpy(camera_name, str, 16);
|
||||
+ pr_info("Beagle camera: %s\n", camera_name);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int __init beagle_opp_init(void)
|
||||
{
|
||||
int r = 0;
|
||||
@@ -1155,8 +1263,42 @@ static void __init omap3_beagle_init(void)
|
||||
pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup));
|
||||
}
|
||||
|
||||
+static int __init omap3_beagle_late_initcall(void)
|
||||
+{
|
||||
+ if (!machine_is_omap3_beagle())
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!cpu_is_omap3630())
|
||||
+ return 0;
|
||||
+
|
||||
+#if IS_ENABLED(CONFIG_VIDEO_MT9P031)
|
||||
+ if ((!strcmp(camera_name, "lbcm5m1")) || (!strcmp(camera_name, "li5m03")))
|
||||
+ {
|
||||
+ pr_info("Beagle camera: MT9P031 init\n");
|
||||
+
|
||||
+ reg_1v8 = regulator_get(NULL, "cam_1v8");
|
||||
+ if (IS_ERR(reg_1v8))
|
||||
+ pr_err("%s: cannot get cam_1v8 regulator\n", __func__);
|
||||
+ else
|
||||
+ regulator_enable(reg_1v8);
|
||||
+
|
||||
+ reg_2v8 = regulator_get(NULL, "cam_2v8");
|
||||
+ if (IS_ERR(reg_2v8))
|
||||
+ pr_err("%s: cannot get cam_2v8 regulator\n", __func__);
|
||||
+ else
|
||||
+ regulator_enable(reg_2v8);
|
||||
+
|
||||
+ omap3_init_camera(&beagle_isp_platform_data);
|
||||
+ }
|
||||
+#endif
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
early_param("buddy", expansionboard_setup);
|
||||
early_param("buddy2", expansionboard2_setup);
|
||||
+early_param("camera", camera_setup);
|
||||
+
|
||||
+late_initcall(omap3_beagle_late_initcall);
|
||||
|
||||
MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
|
||||
/* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
From f2e2294733d926e627dcda6425f58611b185c7fc Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Tue, 11 Dec 2012 07:02:40 -0600
|
||||
Subject: [PATCH 10/10] Beagle: expansion: add LSR COM6L Adapter Board
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 60 ++++++++++++++++++++++++++++---
|
||||
1 file changed, 55 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index 0ac1b49..5a7e7b5 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -202,6 +202,7 @@ static void __init omap3_beagle_init_rev(void)
|
||||
char expansionboard_name[16];
|
||||
char expansionboard2_name[16];
|
||||
char camera_name[16];
|
||||
+char wl12xx_name[16];
|
||||
|
||||
enum {
|
||||
EXPANSION_MMC_NONE = 0,
|
||||
@@ -237,6 +238,10 @@ struct wl12xx_platform_data omap_beagle_wlan_data __initdata = {
|
||||
.board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */
|
||||
};
|
||||
|
||||
+struct wl12xx_platform_data omap_beagle_wlan_data_26mhz __initdata = {
|
||||
+ .board_ref_clock = WL12XX_REFCLOCK_26, /* 26 MHz */
|
||||
+};
|
||||
+
|
||||
static struct ti_st_plat_data wilink_platform_data = {
|
||||
.nshutdown_gpio = OMAP_BEAGLE_BT_EN_GPIO,
|
||||
.dev_name = "/dev/ttyO1",
|
||||
@@ -987,6 +992,18 @@ static int __init camera_setup(char *str)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int __init wl12xx_setup(char *str)
|
||||
+{
|
||||
+ if (!machine_is_omap3_beagle())
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!str)
|
||||
+ return -EINVAL;
|
||||
+ strncpy(wl12xx_name, str, 16);
|
||||
+ pr_info("Beagle wl12xx clk: %s\n", wl12xx_name);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int __init beagle_opp_init(void)
|
||||
{
|
||||
int r = 0;
|
||||
@@ -1114,9 +1131,29 @@ static void __init omap3_beagle_init(void)
|
||||
omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT);
|
||||
}
|
||||
|
||||
- if (!strcmp(expansionboard_name, "bbtoys-wifi"))
|
||||
+ if ((!strcmp(expansionboard_name, "bbtoys-wifi")) || (!strcmp(expansionboard_name, "lsr-com6l-adpt")))
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_WL12XX)
|
||||
+ pr_info("Beagle expansion: wl12xx: setting up gpio pinmux\n");
|
||||
+
|
||||
+ omap_mux_init_gpio(OMAP_BEAGLE_FM_EN_BT_WU, OMAP_PIN_OUTPUT);
|
||||
+ omap_mux_init_gpio(OMAP_BEAGLE_BT_EN_GPIO, OMAP_PIN_OUTPUT);
|
||||
+ omap_mux_init_gpio(OMAP_BEAGLE_WLAN_EN_GPIO, OMAP_PIN_OUTPUT);
|
||||
+
|
||||
+ omap_mux_init_gpio(OMAP_BEAGLE_WLAN_IRQ_GPIO, OMAP_PIN_INPUT_PULLUP);
|
||||
+
|
||||
+ /* WLAN SDIO: MMC2 CLK */
|
||||
+ omap_mux_init_signal("sdmmc2_clk.sdmmc2_clk", OMAP_PIN_INPUT_PULLUP);
|
||||
+
|
||||
+ /* WLAN SDIO: MMC2 CMD */
|
||||
+ omap_mux_init_signal("sdmmc2_cmd.sdmmc2_cmd", OMAP_PIN_INPUT_PULLUP);
|
||||
+
|
||||
+ /* WLAN SDIO: MMC2 DAT[0-3] */
|
||||
+ omap_mux_init_signal("sdmmc2_dat0.sdmmc2_dat0", OMAP_PIN_INPUT_PULLUP);
|
||||
+ omap_mux_init_signal("sdmmc2_dat1.sdmmc2_dat1", OMAP_PIN_INPUT_PULLUP);
|
||||
+ omap_mux_init_signal("sdmmc2_dat2.sdmmc2_dat2", OMAP_PIN_INPUT_PULLUP);
|
||||
+ omap_mux_init_signal("sdmmc2_dat3.sdmmc2_dat3", OMAP_PIN_INPUT_PULLUP);
|
||||
+
|
||||
expansion_config.mmc_settings = EXPANSION_MMC_WIFI;
|
||||
#endif
|
||||
}
|
||||
@@ -1208,12 +1245,24 @@ static void __init omap3_beagle_init(void)
|
||||
gpio_export(162, 1);
|
||||
}
|
||||
|
||||
- if (!strcmp(expansionboard_name, "bbtoys-wifi"))
|
||||
+ if ((!strcmp(expansionboard_name, "bbtoys-wifi")) || (!strcmp(expansionboard_name, "lsr-com6l-adpt")))
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_WL12XX)
|
||||
- omap_beagle_wlan_data.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO);
|
||||
- if (wl12xx_set_platform_data(&omap_beagle_wlan_data))
|
||||
- pr_err("error setting wl12xx data\n");
|
||||
+ pr_info("Beagle expansionboard: initializing wl12xx platform\n");
|
||||
+
|
||||
+ if (!strcmp(wl12xx_name, "wl12xx_26mhz")) {
|
||||
+ pr_info("wl12xx: 26Mhz reference clock (TiWi5)\n");
|
||||
+ omap_beagle_wlan_data_26mhz.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO);
|
||||
+ if (wl12xx_set_platform_data(&omap_beagle_wlan_data_26mhz))
|
||||
+ pr_err("error setting wl12xx data\n");
|
||||
+ } else {
|
||||
+ pr_info("wl12xx: 38.4Mhz reference clock (TiWi2/TiWi-BLE)\n");
|
||||
+ pr_info("wl12xx: for (TiWi5) support pass kernel [wl12xx_clk=wl12xx_26mhz]\n");
|
||||
+ omap_beagle_wlan_data.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO);
|
||||
+ if (wl12xx_set_platform_data(&omap_beagle_wlan_data))
|
||||
+ pr_err("error setting wl12xx data\n");
|
||||
+ }
|
||||
+
|
||||
pr_info("Beagle expansionboard: registering wl12xx bt platform device\n");
|
||||
platform_device_register(&wl12xx_device);
|
||||
platform_device_register(&btwilink_device);
|
||||
@@ -1307,6 +1356,7 @@ static int __init omap3_beagle_late_initcall(void)
|
||||
early_param("buddy", expansionboard_setup);
|
||||
early_param("buddy2", expansionboard2_setup);
|
||||
early_param("camera", camera_setup);
|
||||
+early_param("wl12xx_clk", wl12xx_setup);
|
||||
|
||||
late_initcall(omap3_beagle_late_initcall);
|
||||
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
From 89eb49ac0268518799984fa035ac3fea0ae758ec Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Mon, 21 Jan 2013 11:52:20 -0600
|
||||
Subject: [PATCH 11/11] Beagle: expansion: LSR COM6L Adapter Board also
|
||||
initialize the 24c256 eeprom
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 20 ++++++++++++++++++++
|
||||
1 file changed, 20 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index 5a7e7b5..6797488 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -39,6 +39,7 @@
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
+#include <linux/i2c/at24.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
@@ -214,6 +215,7 @@ enum {
|
||||
EXPANSION_I2C_NONE = 0,
|
||||
EXPANSION_I2C_ZIPPY,
|
||||
EXPANSION_I2C_7ULCD,
|
||||
+ EXPANSION_I2C_COM6L,
|
||||
};
|
||||
|
||||
static struct {
|
||||
@@ -856,6 +858,20 @@ static struct isp_platform_data beagle_isp_platform_data = {
|
||||
};
|
||||
#endif
|
||||
|
||||
+static struct at24_platform_data beagle_at24_eeprom_info = {
|
||||
+ .byte_len = (256*1024) / 8,
|
||||
+ .page_size = 64,
|
||||
+ .flags = AT24_FLAG_ADDR16,
|
||||
+ .context = (void *)NULL,
|
||||
+};
|
||||
+
|
||||
+static struct i2c_board_info __initdata com6l_adpt_eeprom[] = {
|
||||
+ {
|
||||
+ I2C_BOARD_INFO("24c256", 0x50),
|
||||
+ .platform_data = &beagle_at24_eeprom_info,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
static int __init omap3_beagle_i2c_init(void)
|
||||
{
|
||||
omap3_pmic_get_config(&beagle_twldata,
|
||||
@@ -875,6 +891,9 @@ static int __init omap3_beagle_i2c_init(void)
|
||||
case EXPANSION_I2C_ZIPPY:
|
||||
omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc));
|
||||
break;
|
||||
+ case EXPANSION_I2C_COM6L:
|
||||
+ omap_register_i2c_bus(2, 400, com6l_adpt_eeprom, ARRAY_SIZE(com6l_adpt_eeprom));
|
||||
+ break;
|
||||
default:
|
||||
omap_register_i2c_bus(2, 400, NULL, 0);
|
||||
}
|
||||
@@ -1155,6 +1174,7 @@ static void __init omap3_beagle_init(void)
|
||||
omap_mux_init_signal("sdmmc2_dat3.sdmmc2_dat3", OMAP_PIN_INPUT_PULLUP);
|
||||
|
||||
expansion_config.mmc_settings = EXPANSION_MMC_WIFI;
|
||||
+ expansion_config.i2c_settings = EXPANSION_I2C_COM6L;
|
||||
#endif
|
||||
}
|
||||
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
From d78f1a01cc52ebad5d59edad772f2b403bfe67bd Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Wed, 12 Dec 2012 11:34:29 -0600
|
||||
Subject: [PATCH 11/11] WIP: Beagle: expansion: extend spidev to uart2
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap3beagle.c | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
index 4fa880a..e4cfd5f 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
|
||||
@@ -1162,6 +1162,16 @@ static void __init omap3_beagle_init(void)
|
||||
if (gpio_is_valid(beagle_config.dvi_pd_gpio))
|
||||
omap_mux_init_gpio(beagle_config.dvi_pd_gpio, OMAP_PIN_OUTPUT);
|
||||
omap_display_init(&beagle_dss_data);
|
||||
+
|
||||
+ if (!strcmp(expansionboard_name, "spidev"))
|
||||
+ {
|
||||
+ pr_info("Beagle expansion: spidev: enable uart2/ttyO1\n");
|
||||
+ omap_mux_init_signal("uart2_tx.uart2_tx", OMAP_PIN_OUTPUT);
|
||||
+ omap_mux_init_signal("uart2_rts.uart2_rts", OMAP_PIN_OUTPUT);
|
||||
+ omap_mux_init_signal("uart2_cts.uart2_cts", OMAP_PIN_INPUT);
|
||||
+ omap_mux_init_signal("mcbsp3_fsx.uart2_rx", OMAP_PIN_INPUT);
|
||||
+ }
|
||||
+
|
||||
omap_serial_init();
|
||||
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
@@ -1248,7 +1258,7 @@ static void __init omap3_beagle_init(void)
|
||||
|
||||
if (!strcmp(expansionboard_name, "spidev"))
|
||||
{
|
||||
- pr_info("Beagle expansionboard: registering spidev\n");
|
||||
+ pr_info("Beagle expansionboard: spidev: enabling spi3/spi4\n");
|
||||
omap3_beagle_config_mcspi3_mux();
|
||||
omap3_beagle_config_mcspi4_mux();
|
||||
spi_register_board_info(beagle_mcspi_board_info, ARRAY_SIZE(beagle_mcspi_board_info));
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
From a3abd1593e381deb4b1f358a55069988996eeae4 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Tue, 2 Aug 2011 21:55:34 -0500
|
||||
Subject: [PATCH 1/2] panda: fix wl12xx regulator
|
||||
|
||||
pulled from: http://elinux.org/Panda_How_to_kernel_3_0_rel
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/twl-common.c | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c
|
||||
index e49b40b..0fd1a70 100644
|
||||
--- a/arch/arm/mach-omap2/twl-common.c
|
||||
+++ b/arch/arm/mach-omap2/twl-common.c
|
||||
@@ -360,6 +360,7 @@ static struct regulator_init_data omap4_vusb_idata = {
|
||||
static struct regulator_init_data omap4_clk32kg_idata = {
|
||||
.constraints = {
|
||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||
+ .always_on = true,
|
||||
},
|
||||
};
|
||||
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
From 8de5d11f076ee25182df805ab78e0823ce4dd2be Mon Sep 17 00:00:00 2001
|
||||
From: Ricardo Salveti de Araujo <ricardo.salveti@linaro.org>
|
||||
Date: Tue, 25 Oct 2011 10:06:39 +0200
|
||||
Subject: [PATCH 2/2] ti-st/st-kim: fixing firmware path
|
||||
|
||||
Signed-off-by: Ricardo Salveti de Araujo <ricardo.salveti@linaro.org>
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
drivers/misc/ti-st/st_kim.c | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/misc/ti-st/st_kim.c b/drivers/misc/ti-st/st_kim.c
|
||||
index 9ff942a..f673464 100644
|
||||
--- a/drivers/misc/ti-st/st_kim.c
|
||||
+++ b/drivers/misc/ti-st/st_kim.c
|
||||
@@ -244,7 +244,7 @@ static long read_local_version(struct kim_data_s *kim_gdata, char *bts_scr_name)
|
||||
if (version & 0x8000)
|
||||
maj_ver |= 0x0008;
|
||||
|
||||
- sprintf(bts_scr_name, "TIInit_%d.%d.%d.bts", chip, maj_ver, min_ver);
|
||||
+ sprintf(bts_scr_name, "ti-connectivity/TIInit_%d.%d.%d.bts", chip, maj_ver, min_ver);
|
||||
|
||||
/* to be accessed later via sysfs entry */
|
||||
kim_gdata->version.full = version;
|
||||
@@ -287,7 +287,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
|
||||
long len = 0;
|
||||
unsigned char *ptr = NULL;
|
||||
unsigned char *action_ptr = NULL;
|
||||
- unsigned char bts_scr_name[30] = { 0 }; /* 30 char long bts scr name? */
|
||||
+ unsigned char bts_scr_name[50] = { 0 }; /* 50 char long bts scr name? */
|
||||
int wr_room_space;
|
||||
int cmd_size;
|
||||
unsigned long timeout;
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
From 3304f2feba4999fc1013911f0cf0d9acc33a0117 Mon Sep 17 00:00:00 2001
|
||||
From: Adrien Ferre <ferre.adrien@gmail.com>
|
||||
Date: Mon, 25 Mar 2013 12:00:38 -0500
|
||||
Subject: [PATCH 3/3] Panda: expansion: add spidev
|
||||
|
||||
I've made a patch to enable spidev on pandaboards using buddy=spidev just like for beagle.
|
||||
|
||||
https://github.com/RobertCNelson/stable-kernel/issues/22
|
||||
|
||||
Signed-off-by: Adrien Ferre <ferre.adrien@gmail.com>
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap4panda.c | 43 ++++++++++++++++++++++++++++++++
|
||||
1 file changed, 43 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
|
||||
index 1e2c75e..3563f86 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap4panda.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap4panda.c
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/leds.h>
|
||||
+#include <linux/irq.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
@@ -35,6 +36,7 @@
|
||||
#include <linux/wl12xx.h>
|
||||
#include <linux/irqchip/arm-gic.h>
|
||||
#include <linux/platform_data/omap-abe-twl6040.h>
|
||||
+#include <linux/spi/spi.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
@@ -54,6 +56,8 @@
|
||||
#define GPIO_WIFI_PMENA 43
|
||||
#define GPIO_WIFI_IRQ 53
|
||||
|
||||
+char expboard_name[16];
|
||||
+
|
||||
/* wl127x BT, FM, GPS connectivity chip */
|
||||
static struct ti_st_plat_data wilink_platform_data = {
|
||||
.nshutdown_gpio = 46,
|
||||
@@ -99,6 +103,25 @@ static struct platform_device leds_gpio = {
|
||||
},
|
||||
};
|
||||
|
||||
+static struct spi_board_info panda_mcspi_board_info[] = {
|
||||
+ /* spi 1.0 */
|
||||
+ {
|
||||
+ .modalias = "spidev",
|
||||
+ .max_speed_hz = 48000000, //48 Mbps
|
||||
+ .bus_num = 1,
|
||||
+ .chip_select = 0,
|
||||
+ .mode = SPI_MODE_1,
|
||||
+ },
|
||||
+ /* spi 1.1 */
|
||||
+ {
|
||||
+ .modalias = "spidev",
|
||||
+ .max_speed_hz = 48000000, //48 Mbps
|
||||
+ .bus_num = 1,
|
||||
+ .chip_select = 1,
|
||||
+ .mode = SPI_MODE_1,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
static struct omap_abe_twl6040_data panda_abe_audio_data = {
|
||||
/* Audio out */
|
||||
.has_hs = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT,
|
||||
@@ -161,6 +184,18 @@ static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
|
||||
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
|
||||
};
|
||||
|
||||
+static int __init expansionboard_setup(char *str)
|
||||
+{
|
||||
+ if (!machine_is_omap4_panda())
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!str)
|
||||
+ return -EINVAL;
|
||||
+ strncpy(expboard_name, str, 16);
|
||||
+ pr_info("Panda expansionboard: %s\n", expboard_name);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static void __init omap4_ehci_init(void)
|
||||
{
|
||||
int ret;
|
||||
@@ -435,11 +470,19 @@ static void __init omap4_panda_init(void)
|
||||
omap_sdrc_init(NULL, NULL);
|
||||
omap4_twl6030_hsmmc_init(mmc);
|
||||
omap4_ehci_init();
|
||||
+ if (!strcmp(expboard_name, "spidev")) {
|
||||
+ #if IS_ENABLED(CONFIG_SPI_SPIDEV)
|
||||
+ pr_info("Panda expansionboard: spidev: enabling spi3/spi4\n");
|
||||
+ spi_register_board_info(panda_mcspi_board_info, ARRAY_SIZE(panda_mcspi_board_info));
|
||||
+ #endif
|
||||
+ }
|
||||
usb_bind_phy("musb-hdrc.2.auto", 0, "omap-usb2.3.auto");
|
||||
usb_musb_init(&musb_board_data);
|
||||
omap4_panda_display_init();
|
||||
}
|
||||
|
||||
+early_param("buddy", expansionboard_setup);
|
||||
+
|
||||
MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board")
|
||||
/* Maintainer: David Anders - Texas Instruments Inc */
|
||||
.atag_offset = 0x100,
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
From 359104632fa556e3c5c78e4016c2585896225716 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Mon, 1 Apr 2013 12:17:50 -0500
|
||||
Subject: [PATCH 4/4] HACK: PandaES: disable cpufreq so board will boot
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
drivers/cpufreq/omap-cpufreq.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/drivers/cpufreq/omap-cpufreq.c b/drivers/cpufreq/omap-cpufreq.c
|
||||
index 0279d18..0a8ac09 100644
|
||||
--- a/drivers/cpufreq/omap-cpufreq.c
|
||||
+++ b/drivers/cpufreq/omap-cpufreq.c
|
||||
@@ -31,6 +31,8 @@
|
||||
#include <asm/smp_plat.h>
|
||||
#include <asm/cpu.h>
|
||||
|
||||
+#include "../../arch/arm/mach-omap2/soc.h"
|
||||
+
|
||||
/* OPP tolerance in percentage */
|
||||
#define OPP_TOLERANCE 4
|
||||
|
||||
@@ -246,6 +248,11 @@ static struct cpufreq_driver omap_driver = {
|
||||
|
||||
static int omap_cpufreq_probe(struct platform_device *pdev)
|
||||
{
|
||||
+ if (cpu_is_omap446x()) {
|
||||
+ pr_err("%s: unsupported Silicon?\n", __func__);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
mpu_dev = get_cpu_device(0);
|
||||
if (!mpu_dev) {
|
||||
pr_warning("%s: unable to get the mpu device\n", __func__);
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
From 76c1d8cdfa0967b04ca8168a77bb101d4ea71150 Mon Sep 17 00:00:00 2001
|
||||
From: Santosh Shilimkar <santosh.shilimkar@ti.com>
|
||||
Date: Mon, 18 Mar 2013 06:51:30 +0000
|
||||
Subject: [PATCH 6/6] ARM: hw_breakpoint: Enable debug powerdown only if
|
||||
system supports 'has_ossr'
|
||||
|
||||
On Friday 15 March 2013 10:30 AM, Will Deacon wrote:
|
||||
> On Thu, Mar 14, 2013 at 01:08:00PM +0530, Santosh Shilimkar wrote:
|
||||
>> Will,
|
||||
>
|
||||
> Hi guys,
|
||||
>
|
||||
> I'm out of the office at the moment and have really terrible connectivity,
|
||||
> so I can't do too much until next week. However, I don't think adding the
|
||||
> has_ossr check is the right fix for this problem.
|
||||
>
|
||||
>> On Wednesday 13 March 2013 05:59 PM, Lokesh Vutla wrote:
|
||||
>>> Hi Dietmar,
|
||||
>>> On Wednesday 13 March 2013 05:35 PM, Dietmar Eggemann wrote:
|
||||
>>>> On 13/03/13 06:52, Lokesh Vutla wrote:
|
||||
>>>>> Commit {9a6eb31 ARM: hw_breakpoint: Debug powerdown support for
|
||||
>>>>> self-hosted
|
||||
>>>>> debug} introduces debug powerdown support for self-hosted debug.
|
||||
>>>>> While merging the patch 'has_ossr' check was removed which
|
||||
>>>>> was needed for hardwares which doesn't support self-hosted debug.
|
||||
>>>>> Pandaboard (A9) is one such hardware and Dietmar's orginial
|
||||
>>>>> patch did mention this issue.
|
||||
>>>>> Without that check on Panda with CPUIDLE enabled, a flood of
|
||||
>>>>> below messages thrown.
|
||||
>>>>>
|
||||
>>>>> [ 3.597930] hw-breakpoint: CPU 0 failed to disable vector catch
|
||||
>>>>> [ 3.597991] hw-breakpoint: CPU 1 failed to disable vector catch
|
||||
>
|
||||
> Ok, so this means that we've taken an undefined instruction exception while
|
||||
> trying to reset the debug registers on the PM_EXIT path. Now, the code there
|
||||
> deals with CPUs that don't have the save/restore registers just fine, so
|
||||
> that shouldn't have anything to do with this problem, particularly if the
|
||||
> bit that is tripping us up is related to clearing vector catch.
|
||||
>
|
||||
Agree.
|
||||
|
||||
> Furthermore, I was under the impression that hw_breakpoint did actually
|
||||
> work on panda, which implies that a cold boot *does* manage to reset the
|
||||
> registers (can you please confirm this by looking in your dmesg during
|
||||
> boot?). In that case, it seems as though a PM cycle is powering down a
|
||||
> bunch of debug logic that was powered up during boot, and then we trip over
|
||||
> because we can't access the register bank.
|
||||
>
|
||||
Actually it seems to be without PM. Thanks to analysis from Lokesh, the issue
|
||||
can be seen even with just suspend or cpu hotplug. So cold boot as such is
|
||||
fine.
|
||||
|
||||
> The proper solution to this problem requires us to establish exactly what is
|
||||
> turning off the debug registers, and then having an OMAP PM notifier to
|
||||
> enable it again. Assuming this has always been the case, I expect hardware
|
||||
> debug across PM fails silently with older kernels.
|
||||
>
|
||||
This has been always the case it seems with CPU power cycle.
|
||||
After the CPU is power cycled, 'DBGAUTHSTATUS' reads '0xaa' rather
|
||||
than '0xaf' which means 'DBGEN = 0' and hence code fails to enable
|
||||
monitor mode. This happens on both secure and GP devices and it can not
|
||||
be patched since the secure code is ROM'ed. We didn't notice so far
|
||||
because hw_breakpoint support was not default enabled on OMAP till the
|
||||
multi-platform build.
|
||||
|
||||
>> I was also wondering whether we should just warn once rather
|
||||
>> than continuous warnings in the notifier. Patch is end of the
|
||||
>> email.
|
||||
>
|
||||
> Could do, but I'd like to see a fix for the real issue before we simply hide
|
||||
> the warnings :)
|
||||
>
|
||||
Agree here too. As evident above, the feature won't work on OMAP4
|
||||
devices with PM and hence some solution is needed.
|
||||
|
||||
What you think of below ?
|
||||
|
||||
>From d74b4264f6a5967b0f7ada96aad77ab0ac30dbed Mon Sep 17 00:00:00 2001
|
||||
From: Santosh Shilimkar <santosh.shilimkar@ti.com>
|
||||
Date: Mon, 18 Mar 2013 11:59:04 +0530
|
||||
Subject: [PATCH] ARM: hw_breakpoints: Check for CPU debug availability before
|
||||
enabling it
|
||||
|
||||
CPU debug features like hardware break, watchpoints can be used only when
|
||||
the debug mode is enabled and available for non-secure mode.
|
||||
|
||||
Hence check 'DBGAUTHSTATUS.DBGEN' before proceeding to enable the
|
||||
features.
|
||||
|
||||
Thanks to Will for pointers and Lokesh for the analysis of the issue on
|
||||
OMAP4 where after a CPU power cycle, debug mode gets disabled.
|
||||
|
||||
Cc: Will Deacon <Will.Deacon@arm.com>
|
||||
|
||||
Tested-by: Lokesh Vutla <lokeshvutla@ti.com>
|
||||
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
|
||||
---
|
||||
arch/arm/kernel/hw_breakpoint.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c
|
||||
index 96093b7..683a7cf 100644
|
||||
--- a/arch/arm/kernel/hw_breakpoint.c
|
||||
+++ b/arch/arm/kernel/hw_breakpoint.c
|
||||
@@ -930,6 +930,14 @@ static void reset_ctrl_regs(void *unused)
|
||||
int i, raw_num_brps, err = 0, cpu = smp_processor_id();
|
||||
u32 val;
|
||||
|
||||
+ /* Check if we have access to CPU debug features */
|
||||
+ ARM_DBG_READ(c7, c14, 6, val);
|
||||
+ if ((val & 0x1) == 0) {
|
||||
+ pr_warn_once("CPU %d debug is unavailable\n", cpu);
|
||||
+ cpumask_or(&debug_err_mask, &debug_err_mask, cpumask_of(cpu));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* v7 debug contains save and restore registers so that debug state
|
||||
* can be maintained across low-power modes without leaving the debug
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
From 42d8b74383b670412107c943efd2fec46aa04158 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Sat, 1 Jun 2013 16:32:46 -0500
|
||||
Subject: [PATCH 07/10] Revert "regulator: twl: Remove TWL6030_FIXED_RESOURCE"
|
||||
|
||||
This reverts commit d1924519fe1dada0cfd9a228bf2ff1ea15840c84.
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
drivers/regulator/twl-regulator.c | 13 +++++++++++++
|
||||
1 file changed, 13 insertions(+)
|
||||
|
||||
diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c
|
||||
index fb6e67d..7ce7edf 100644
|
||||
--- a/drivers/regulator/twl-regulator.c
|
||||
+++ b/drivers/regulator/twl-regulator.c
|
||||
@@ -933,6 +933,19 @@ static const struct twlreg_info TWLFIXED_INFO_##label = { \
|
||||
}, \
|
||||
}
|
||||
|
||||
+#define TWL6030_FIXED_RESOURCE(label, offset, turnon_delay) \
|
||||
+static struct twlreg_info TWLRES_INFO_##label = { \
|
||||
+ .base = offset, \
|
||||
+ .desc = { \
|
||||
+ .name = #label, \
|
||||
+ .id = TWL6030_REG_##label, \
|
||||
+ .ops = &twl6030_fixed_resource, \
|
||||
+ .type = REGULATOR_VOLTAGE, \
|
||||
+ .owner = THIS_MODULE, \
|
||||
+ .enable_time = turnon_delay, \
|
||||
+ }, \
|
||||
+ }
|
||||
+
|
||||
#define TWL6025_ADJUSTABLE_SMPS(label, offset) \
|
||||
static const struct twlreg_info TWLSMPS_INFO_##label = { \
|
||||
.base = offset, \
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
From 48e4598f1b8e9dd486d551b76c5f5021d0dc946d Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Sat, 1 Jun 2013 16:32:48 -0500
|
||||
Subject: [PATCH 08/10] Revert "regulator: twl: Remove another unused variable
|
||||
warning"
|
||||
|
||||
This reverts commit 029dd3cefa46ecdd879f9b4e2df3bdf4371cc22c.
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
drivers/regulator/twl-regulator.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c
|
||||
index 7ce7edf..124a2f2 100644
|
||||
--- a/drivers/regulator/twl-regulator.c
|
||||
+++ b/drivers/regulator/twl-regulator.c
|
||||
@@ -633,6 +633,13 @@ static struct regulator_ops twl6030fixed_ops = {
|
||||
.get_status = twl6030reg_get_status,
|
||||
};
|
||||
|
||||
+static struct regulator_ops twl6030_fixed_resource = {
|
||||
+ .enable = twl6030reg_enable,
|
||||
+ .disable = twl6030reg_disable,
|
||||
+ .is_enabled = twl6030reg_is_enabled,
|
||||
+ .get_status = twl6030reg_get_status,
|
||||
+};
|
||||
+
|
||||
/*
|
||||
* SMPS status and control
|
||||
*/
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
From 76cc643690032d9789bbd17c9a3542cae4b0603e Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Sat, 1 Jun 2013 16:32:51 -0500
|
||||
Subject: [PATCH 09/10] Revert "regulator: twl: Remove references to the
|
||||
twl4030 regulator"
|
||||
|
||||
This reverts commit e76ab829cc2d8b6350a3f01fffb208df4d7d8c1b.
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
drivers/regulator/twl-regulator.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c
|
||||
index 124a2f2..5a18317 100644
|
||||
--- a/drivers/regulator/twl-regulator.c
|
||||
+++ b/drivers/regulator/twl-regulator.c
|
||||
@@ -1021,6 +1021,7 @@ TWL6030_FIXED_LDO(VDAC, 0x64, 1800, 0);
|
||||
TWL6030_FIXED_LDO(VUSB, 0x70, 3300, 0);
|
||||
TWL6030_FIXED_LDO(V1V8, 0x16, 1800, 0);
|
||||
TWL6030_FIXED_LDO(V2V1, 0x1c, 2100, 0);
|
||||
+TWL6030_FIXED_RESOURCE(CLK32KG, 0x8C, 0);
|
||||
TWL6025_ADJUSTABLE_SMPS(SMPS3, 0x34);
|
||||
TWL6025_ADJUSTABLE_SMPS(SMPS4, 0x10);
|
||||
TWL6025_ADJUSTABLE_SMPS(VIO, 0x16);
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
From ffdb3fad79cf70dcc943764f075215d6525435be Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Sat, 1 Jun 2013 16:32:54 -0500
|
||||
Subject: [PATCH 10/10] Revert "regulator: twl: Remove references to 32kHz
|
||||
clock from DT bindings"
|
||||
|
||||
This reverts commit 0e8e5c34cf1a8beaaf0a6a05c053592693bf8cb4.
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
Documentation/devicetree/bindings/regulator/twl-regulator.txt | 1 +
|
||||
drivers/regulator/twl-regulator.c | 2 ++
|
||||
2 files changed, 3 insertions(+)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/regulator/twl-regulator.txt b/Documentation/devicetree/bindings/regulator/twl-regulator.txt
|
||||
index 658749b..0c3395d 100644
|
||||
--- a/Documentation/devicetree/bindings/regulator/twl-regulator.txt
|
||||
+++ b/Documentation/devicetree/bindings/regulator/twl-regulator.txt
|
||||
@@ -15,6 +15,7 @@ For twl6030 regulators/LDOs
|
||||
- "ti,twl6030-vusb" for VUSB LDO
|
||||
- "ti,twl6030-v1v8" for V1V8 LDO
|
||||
- "ti,twl6030-v2v1" for V2V1 LDO
|
||||
+ - "ti,twl6030-clk32kg" for CLK32KG RESOURCE
|
||||
- "ti,twl6030-vdd1" for VDD1 SMPS
|
||||
- "ti,twl6030-vdd2" for VDD2 SMPS
|
||||
- "ti,twl6030-vdd3" for VDD3 SMPS
|
||||
diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c
|
||||
index 5a18317..40f27bb 100644
|
||||
--- a/drivers/regulator/twl-regulator.c
|
||||
+++ b/drivers/regulator/twl-regulator.c
|
||||
@@ -1054,6 +1054,7 @@ static u8 twl_get_smps_mult(void)
|
||||
#define TWL6030_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL6030, label)
|
||||
#define TWL6025_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL6025, label)
|
||||
#define TWLFIXED_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLFIXED, label)
|
||||
+#define TWLRES_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLRES, label)
|
||||
#define TWLSMPS_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLSMPS, label)
|
||||
|
||||
static const struct of_device_id twl_of_match[] = {
|
||||
@@ -1101,6 +1102,7 @@ static const struct of_device_id twl_of_match[] = {
|
||||
TWLFIXED_OF_MATCH("ti,twl6030-vusb", VUSB),
|
||||
TWLFIXED_OF_MATCH("ti,twl6030-v1v8", V1V8),
|
||||
TWLFIXED_OF_MATCH("ti,twl6030-v2v1", V2V1),
|
||||
+ TWLRES_OF_MATCH("ti,twl6030-clk32kg", CLK32KG),
|
||||
TWLSMPS_OF_MATCH("ti,twl6025-smps3", SMPS3),
|
||||
TWLSMPS_OF_MATCH("ti,twl6025-smps4", SMPS4),
|
||||
TWLSMPS_OF_MATCH("ti,twl6025-vio", VIO),
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
From 9f5066a898b77f2fe2b1f0946bb6afebe3d08f6d Mon Sep 17 00:00:00 2001
|
||||
From: Yann <yann.wanwanscappel@free.fr>
|
||||
Date: Sat, 8 Jun 2013 13:06:37 -0500
|
||||
Subject: [PATCH 7/7] panda: spidev: setup pinmux
|
||||
|
||||
It works fine on my board, I've been able to perform data transfers using the spidev_test program provided in kernel documentation
|
||||
(shortcut between SIMO and SOMI to perform an hardware loopback). I also checked that CS0 and CS1 and CLK are properly driven using my scope.
|
||||
|
||||
The clock is strangely configured as input, but it is also the case for omap3 beagle board, so I guess this is fine.
|
||||
|
||||
Signed-off-by: Yann <yann.wanwanscappel@free.fr>
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap4panda.c | 13 ++++++++++++-
|
||||
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
|
||||
index 3563f86..10bb576 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap4panda.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap4panda.c
|
||||
@@ -103,6 +103,16 @@ static struct platform_device leds_gpio = {
|
||||
},
|
||||
};
|
||||
|
||||
+static void __init omap4_panda_config_mcspi1_mux(void)
|
||||
+{
|
||||
+ /* NOTE: Clock pins need to be in input mode */
|
||||
+ omap_mux_init_signal("mcspi1_clk", OMAP_PIN_INPUT);
|
||||
+ omap_mux_init_signal("mcspi1_simo", OMAP_PIN_OUTPUT);
|
||||
+ omap_mux_init_signal("mcspi1_somi", OMAP_PIN_INPUT_PULLUP);
|
||||
+ omap_mux_init_signal("mcspi1_cs0", OMAP_PIN_OUTPUT);
|
||||
+ omap_mux_init_signal("mcspi1_cs1", OMAP_PIN_OUTPUT);
|
||||
+}
|
||||
+
|
||||
static struct spi_board_info panda_mcspi_board_info[] = {
|
||||
/* spi 1.0 */
|
||||
{
|
||||
@@ -472,7 +482,8 @@ static void __init omap4_panda_init(void)
|
||||
omap4_ehci_init();
|
||||
if (!strcmp(expboard_name, "spidev")) {
|
||||
#if IS_ENABLED(CONFIG_SPI_SPIDEV)
|
||||
- pr_info("Panda expansionboard: spidev: enabling spi3/spi4\n");
|
||||
+ pr_info("Panda expansionboard: spidev: enabling spi1.0 and spi1.1\n");
|
||||
+ omap4_panda_config_mcspi1_mux();
|
||||
spi_register_board_info(panda_mcspi_board_info, ARRAY_SIZE(panda_mcspi_board_info));
|
||||
#endif
|
||||
}
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
From 6bce72b21600d9f52ae60d5bf80d00152eb75b50 Mon Sep 17 00:00:00 2001
|
||||
From: Steve Sakoman <steve@sakoman.com>
|
||||
Date: Tue, 19 Jan 2010 21:19:15 -0800
|
||||
Subject: [PATCH 1/2] OMAP: DSS2: add bootarg for selecting svideo
|
||||
|
||||
OMAP: DSS2: add bootarg for selecting svideo or composite for tv output
|
||||
also add pal-16 and ntsc-16 omapfb.mode settings for 16bpp
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
drivers/video/omap2/dss/venc.c | 22 ++++++++++++++++++++++
|
||||
drivers/video/omap2/omapfb/omapfb-main.c | 10 +++++++++-
|
||||
2 files changed, 31 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
|
||||
index 56efa3b..d46f7f8 100644
|
||||
--- a/drivers/video/omap2/dss/venc.c
|
||||
+++ b/drivers/video/omap2/dss/venc.c
|
||||
@@ -86,6 +86,11 @@
|
||||
#define VENC_OUTPUT_TEST 0xC8
|
||||
#define VENC_DAC_B__DAC_C 0xC8
|
||||
|
||||
+static char *tv_connection;
|
||||
+
|
||||
+module_param_named(tvcable, tv_connection, charp, 0);
|
||||
+MODULE_PARM_DESC(tvcable, "TV connection type (svideo, composite)");
|
||||
+
|
||||
struct venc_config {
|
||||
u32 f_control;
|
||||
u32 vidout_ctrl;
|
||||
@@ -465,6 +470,23 @@ static int venc_power_on(struct omap_dss_device *dssdev)
|
||||
if (r)
|
||||
goto err2;
|
||||
|
||||
+ /* Allow the TV output to be overriden */
|
||||
+ if (tv_connection) {
|
||||
+ if (strcmp(tv_connection, "svideo") == 0) {
|
||||
+ printk(KERN_INFO
|
||||
+ "omapdss: tv output is svideo.\n");
|
||||
+ dssdev->phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO;
|
||||
+ } else if (strcmp(tv_connection, "composite") == 0) {
|
||||
+ printk(KERN_INFO
|
||||
+ "omapdss: tv output is composite.\n");
|
||||
+ dssdev->phy.venc.type = OMAP_DSS_VENC_TYPE_COMPOSITE;
|
||||
+ } else {
|
||||
+ printk(KERN_INFO
|
||||
+ "omapdss: unsupported output type'%s'.\n",
|
||||
+ tv_connection);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
|
||||
err2:
|
||||
diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c
|
||||
index bc225e4..34d6679 100644
|
||||
--- a/drivers/video/omap2/omapfb/omapfb-main.c
|
||||
+++ b/drivers/video/omap2/omapfb/omapfb-main.c
|
||||
@@ -2032,7 +2032,15 @@ static int omapfb_mode_to_timings(const char *mode_str,
|
||||
int r;
|
||||
|
||||
#ifdef CONFIG_OMAP2_DSS_VENC
|
||||
- if (strcmp(mode_str, "pal") == 0) {
|
||||
+ if (strcmp(mode_str, "pal-16") == 0) {
|
||||
+ *timings = omap_dss_pal_timings;
|
||||
+ *bpp = 16;
|
||||
+ return 0;
|
||||
+ } else if (strcmp(mode_str, "ntsc-16") == 0) {
|
||||
+ *timings = omap_dss_ntsc_timings;
|
||||
+ *bpp = 16;
|
||||
+ return 0;
|
||||
+ } else if (strcmp(mode_str, "pal") == 0) {
|
||||
*timings = omap_dss_pal_timings;
|
||||
*bpp = 24;
|
||||
return 0;
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
From 747de06d5cc69b2407684ba0455fff5c1d6af797 Mon Sep 17 00:00:00 2001
|
||||
From: Steve Sakoman <steve@sakoman.com>
|
||||
Date: Sat, 19 Dec 2009 06:52:43 -0800
|
||||
Subject: [PATCH 2/2] video: add timings for hd720
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
drivers/video/modedb.c | 4 ++++
|
||||
1 files changed, 4 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c
|
||||
index a9a907c..5b686de 100644
|
||||
--- a/drivers/video/modedb.c
|
||||
+++ b/drivers/video/modedb.c
|
||||
@@ -103,6 +103,10 @@ static const struct fb_videomode modedb[] = {
|
||||
{ NULL, 70, 1024, 768, 13333, 144, 24, 29, 3, 136, 6, 0,
|
||||
FB_VMODE_NONINTERLACED },
|
||||
|
||||
+ /* 1280x720 @ 60 Hz, 45 kHz hsync, CEA 681-E Format 4 */
|
||||
+ { "hd720", 60, 1280, 720, 13468, 220, 110, 20, 5, 40, 5, 0,
|
||||
+ FB_VMODE_NONINTERLACED },
|
||||
+
|
||||
/* 1280x1024 @ 87 Hz interlaced, 51 kHz hsync */
|
||||
{ NULL, 87, 1280, 1024, 12500, 56, 16, 128, 1, 216, 12, 0,
|
||||
FB_VMODE_INTERLACED },
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
From 29885f2f3d700341d322274db6ad085e601c0994 Mon Sep 17 00:00:00 2001
|
||||
From: Pantelis Antoniou <panto@antoniou-consulting.com>
|
||||
Date: Fri, 4 Jan 2013 00:32:33 +0200
|
||||
Subject: [PATCH 3/3] arm: Export cache flush management symbols when
|
||||
!MULTI_CACHE
|
||||
|
||||
When compiling a kernel without CONFIG_MULTI_CACHE enabled the
|
||||
dma access functions end up not being exported. Fix it.
|
||||
|
||||
Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
|
||||
---
|
||||
arch/arm/kernel/setup.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
|
||||
index da1d1aa..dcb678c 100644
|
||||
--- a/arch/arm/kernel/setup.c
|
||||
+++ b/arch/arm/kernel/setup.c
|
||||
@@ -923,3 +923,12 @@ const struct seq_operations cpuinfo_op = {
|
||||
.stop = c_stop,
|
||||
.show = c_show
|
||||
};
|
||||
+
|
||||
+/* export the cache management functions */
|
||||
+#ifndef MULTI_CACHE
|
||||
+
|
||||
+EXPORT_SYMBOL(__glue(_CACHE,_dma_map_area));
|
||||
+EXPORT_SYMBOL(__glue(_CACHE,_dma_unmap_area));
|
||||
+EXPORT_SYMBOL(__glue(_CACHE,_dma_flush_range));
|
||||
+
|
||||
+#endif
|
||||
--
|
||||
1.7.10.4
|
||||
|
||||
Reference in New Issue
Block a user