Thread (13 messages) flat view 13 messages, 4 authors, 2008-07-30

Re: [RFC 2.6.26-rc9 2/5] gumstix: conversion to MFP support and add bluetooth support

From: eric miao <hidden>
Date: 2008-07-21 02:13:19

On Sun, Jul 20, 2008 at 2:10 PM, Jaya Kumar [off-list ref] wrote:
This patch converts gumstix over to the MFP configuration system and adds
bluetooth support.
Looks OK to me, except you seem to forget the gpio_request() in
gumstix_bluetooth_init(), with that change,

Acked-by: Eric Miao <redacted>
quoted hunk ↗ jump to hunk
Signed-off-by: Jaya Kumar <redacted>
---
 arch/arm/mach-pxa/gumstix.c |   94 +++++++++++++++++++++++++++++++++++--------
 1 files changed, 77 insertions(+), 17 deletions(-)
diff --git a/arch/arm/mach-pxa/gumstix.c b/arch/arm/mach-pxa/gumstix.c
index bdf2397..06493ff 100644
--- a/arch/arm/mach-pxa/gumstix.c
+++ b/arch/arm/mach-pxa/gumstix.c
@@ -20,8 +20,12 @@
 #include <linux/init.h>
 #include <linux/platform_device.h>
 #include <linux/interrupt.h>
+#include <linux/delay.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
+#include <linux/gpio.h>
+#include <linux/err.h>
+#include <linux/clk.h>

 #include <asm/setup.h>
 #include <asm/memory.h>
@@ -40,7 +44,7 @@

 #include <asm/arch/pxa-regs.h>
 #include <asm/arch/pxa2xx-regs.h>
-#include <asm/arch/pxa2xx-gpio.h>
+#include <asm/arch/mfp-pxa25x.h>

 #include "generic.h"
@@ -85,21 +89,8 @@ static struct platform_device *devices[] __initdata = {
 };

 #ifdef CONFIG_MMC_PXA
-static struct pxamci_platform_data gumstix_mci_platform_data;
-
-static int gumstix_mci_init(struct device *dev, irq_handler_t detect_int,
-                               void *data)
-{
-       pxa_gpio_mode(GPIO6_MMCCLK_MD);
-       pxa_gpio_mode(GPIO53_MMCCLK_MD);
-       pxa_gpio_mode(GPIO8_MMCCS0_MD);
-
-       return 0;
-}
-
 static struct pxamci_platform_data gumstix_mci_platform_data = {
       .ocr_mask       = MMC_VDD_32_33|MMC_VDD_33_34,
-       .init           = gumstix_mci_init,
 };

 static void __init gumstix_mmc_init(void)
@@ -109,11 +100,11 @@ static void __init gumstix_mmc_init(void)
 #else
 static void __init gumstix_mmc_init(void)
 {
-       printk(KERN_INFO "Gumstix mmc disabled\n");
+       pr_debug("Gumstix mmc disabled\n");
 }
 #endif

-#ifdef CONFIG_USB_GADGET_PXA2XX
+#ifdef CONFIG_USB_GADGET_PXA25X
 static struct pxa2xx_udc_mach_info gumstix_udc_info __initdata = {
       .gpio_vbus              = GPIO_GUMSTIX_USB_GPIOn,
       .gpio_pullup            = GPIO_GUMSTIX_USB_GPIOx,
@@ -126,12 +117,81 @@ static void __init gumstix_udc_init(void)
 #else
 static void gumstix_udc_init(void)
 {
-       printk(KERN_INFO "Gumstix udc is disabled\n");
+       pr_debug("Gumstix udc is disabled\n");
 }
 #endif

+#ifdef CONFIG_BT
+/* Normally, the bootloader would have enabled this 32kHz clock but many
+** boards still have u-boot 1.1.4 so we check if it has been turned on and
+** if not, we turn it on with a warning message. */
+static void gumstix_setup_bt_clock(void)
+{
+       int timeout = 500;
+
+       if (!(OSCC & OSCC_OOK))
+               pr_warning("32kHz clock was not on. Bootloader may need to "
+                               "be updated\n");
+       else
+               return;
+
+       OSCC |= OSCC_OON;
+       do {
+               if (OSCC & OSCC_OOK)
+                       break;
+               udelay(1);
+       } while (--timeout);
+       if (!timeout)
+               pr_err("Failed to start 32kHz clock\n");
+}
+
+static void __init gumstix_bluetooth_init(void)
+{
+       int err;
+
+       gumstix_setup_bt_clock();
+
+       err = gpio_direction_output(GPIO_GUMSTIX_BTRESET, 1);
+       if (err) {
+               pr_err("gumstix: can't reset bluetooth\n");
+               return;
+       }
+       gpio_set_value(GPIO_GUMSTIX_BTRESET, 0);
+       udelay(100);
+       gpio_set_value(GPIO_GUMSTIX_BTRESET, 1);
+}
+#else
+static void gumstix_bluetooth_init(void)
+{
+       pr_debug("Gumstix Bluetooth is disabled\n");
+}
+#endif
+
+static unsigned long gumstix_pin_config[] __initdata = {
+       GPIO12_32KHz,
+       /* BTUART */
+       GPIO42_HWUART_RXD,
+       GPIO43_HWUART_TXD,
+       GPIO44_HWUART_CTS,
+       GPIO45_HWUART_RTS,
+       /* MMC */
+       GPIO6_MMC_CLK,
+       GPIO53_MMC_CLK,
+       GPIO8_MMC_CS0,
+       /* these are used by AM200EPD */
+       GPIO51_GPIO,
+       GPIO49_GPIO,
+       GPIO48_GPIO,
+       GPIO32_GPIO,
+       GPIO17_GPIO,
+       GPIO16_GPIO,
+};
+
 static void __init gumstix_init(void)
 {
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(gumstix_pin_config));
+
+       gumstix_bluetooth_init();
       gumstix_udc_init();
       gumstix_mmc_init();
       (void) platform_add_devices(devices, ARRAY_SIZE(devices));
--
1.5.3.6


-------------------------------------------------------------------
List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
FAQ:        http://www.arm.linux.org.uk/mailinglists/faq.php
Etiquette:  http://www.arm.linux.org.uk/mailinglists/etiquette.php


-- 
Cheers
- eric

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help