From patchwork Mon Feb 2 06:42:23 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Sakoman X-Patchwork-Id: 5041 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n126gWMv029578 for ; Mon, 2 Feb 2009 06:42:32 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752752AbZBBGm2 (ORCPT ); Mon, 2 Feb 2009 01:42:28 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752730AbZBBGm2 (ORCPT ); Mon, 2 Feb 2009 01:42:28 -0500 Received: from mail-fx0-f20.google.com ([209.85.220.20]:56312 "EHLO mail-fx0-f20.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752554AbZBBGm0 (ORCPT ); Mon, 2 Feb 2009 01:42:26 -0500 Received: by fxm13 with SMTP id 13so1269258fxm.13 for ; Sun, 01 Feb 2009 22:42:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type:content-transfer-encoding; bh=5MC3FMEQUeyN38+f/1LpJZhCAo2cRM5oUEQU9zhn7Gs=; b=VzEo0wA9CD+f+ZJ/7VQJ4/pV8zo6zIcPG8mr/8k5fU5u0yynPnnJsdpOV3AF9B9PWJ 6QQBN+nvOWv8FdrFRRHHNkP6cVTiZe4lZ+TPj1FK104QiigA8sAB6GCP+IvDvqJjSxat aw2Paju6UD8f7ONEueuW9FZIFlVUpu+OglsLo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=XifRGy1rQGd9Q3qScgEBFDo3gVmTaDOcSHzzPPIZrTr7GEpqWMfK93MrzXA+rdvlI/ Gu03i7lf3Ymt8cv+jQXAcCFOA+tFgpnqAEtv9zMF/NOH5IUcescrkfnIxltrnCkhQnzw kL9E3WTuJoVUY1AnwOxiIVit/hs0uD6FiQLW4= MIME-Version: 1.0 Received: by 10.103.102.17 with SMTP id e17mr374481mum.136.1233556943986; Sun, 01 Feb 2009 22:42:23 -0800 (PST) Date: Sun, 1 Feb 2009 22:42:23 -0800 Message-ID: <5e088bd90902012242q2bc7a272p244a02e9b54002ec@mail.gmail.com> Subject: [PATCH/RFC] ARM: Add ADS7846 touchscreen support to Overo platform From: Steve Sakoman To: linux-omap Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org An upcoming Overo expansion board includes an ADS7846 touchscreen controller. This patch adds support via the ads7846 driver when enabled in the kernel config. Signed-off-by: Steve Sakoman --- arch/arm/mach-omap2/board-overo.c | 61 +++++++++++++++++++++++++ arch/arm/plat-omap/include/mach/board-overo.h | 1 + 2 files changed, 62 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index 032a2c9..2521b21 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c @@ -116,6 +116,66 @@ static inline void __init overo_init_smsc911x(void) static inline void __init overo_init_smsc911x(void) { return; } #endif +#if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ + defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) + +#include +#include +#include + +static struct omap2_mcspi_device_config ads7846_mcspi_config = { + .turbo_mode = 0, + .single_channel = 1, /* 0: slave, 1: master */ +}; + + +static int ads7846_get_pendown_state(void) +{ + return !gpio_get_value(OVERO_GPIO_PENDOWN); +} + +static struct ads7846_platform_data ads7846_config = { + .x_max = 0x0fff, + .y_max = 0x0fff, + .x_plate_ohms = 180, + .pressure_max = 255, + .debounce_max = 10, + .debounce_tol = 3, + .debounce_rep = 1, + .get_pendown_state = ads7846_get_pendown_state, + .keep_vref_on = 1, +}; + +static struct spi_board_info overo_spi_board_info[] __initdata = { + { + .modalias = "ads7846", + .bus_num = 1, + .chip_select = 0, + .max_speed_hz = 1500000, + .controller_data = &ads7846_mcspi_config, + .irq = OMAP_GPIO_IRQ(OVERO_GPIO_PENDOWN), + .platform_data = &ads7846_config, + } +}; + +static void __init overo_ads7846_init(void) +{ + if ((gpio_request(OVERO_GPIO_PENDOWN, "ADS7846_PENDOWN") == 0) && + (gpio_direction_input(OVERO_GPIO_PENDOWN) == 0)) { + gpio_export(OVERO_GPIO_PENDOWN, 0); + } else { + printk(KERN_ERR "could not obtain gpio for ADS7846_PENDOWN\n"); + return; + } + + spi_register_board_info(overo_spi_board_info, + ARRAY_SIZE(overo_spi_board_info)); +} + +#else +static inline void __init overo_ads7846_init(void) { return; } +#endif + static struct mtd_partition overo_nand_partitions[] = { { .name = "xloader", @@ -296,6 +356,7 @@ static void __init overo_init(void) usb_ehci_init(); overo_flash_init(); overo_init_smsc911x(); + overo_ads7846_init(); if ((gpio_request(OVERO_GPIO_W2W_NRESET, "OVERO_GPIO_W2W_NRESET") == 0) && diff --git a/arch/arm/plat-omap/include/mach/board-overo.h b/arch/arm/plat-omap/include/mach/board-overo.h index 8635171..aca717d 100644 --- a/arch/arm/plat-omap/include/mach/board-overo.h +++ b/arch/arm/plat-omap/include/mach/board-overo.h @@ -18,6 +18,7 @@ #define OVERO_GPIO_BT_XGATE 15 #define OVERO_GPIO_W2W_NRESET 16 +#define OVERO_GPIO_PENDOWN 114 #define OVERO_GPIO_BT_NRESET 164 #define OVERO_GPIO_USBH_CPEN 168 #define OVERO_GPIO_USBH_NRESET 183