1/* 2 * Coldfire generic GPIO support 3 * 4 * (C) Copyright 2009, Steven King <sfking@fdwdc.com> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; version 2 of the License. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14*/ 15 16#include <linux/kernel.h> 17#include <linux/init.h> 18 19#include <asm/coldfire.h> 20#include <asm/mcfsim.h> 21#include <asm/mcfgpio.h> 22 23static struct mcf_gpio_chip mcf_gpio_chips[] = { 24 { 25 .gpio_chip = { 26 .label = "PA", 27 .request = mcf_gpio_request, 28 .free = mcf_gpio_free, 29 .direction_input = mcf_gpio_direction_input, 30 .direction_output = mcf_gpio_direction_output, 31 .get = mcf_gpio_get_value, 32 .set = mcf_gpio_set_value, 33 .ngpio = 16, 34 }, 35 .pddr = MCFSIM_PADDR, 36 .podr = MCFSIM_PADAT, 37 .ppdr = MCFSIM_PADAT, 38 }, 39 { 40 .gpio_chip = { 41 .label = "PB", 42 .request = mcf_gpio_request, 43 .free = mcf_gpio_free, 44 .direction_input = mcf_gpio_direction_input, 45 .direction_output = mcf_gpio_direction_output, 46 .get = mcf_gpio_get_value, 47 .set = mcf_gpio_set_value, 48 .base = 16, 49 .ngpio = 16, 50 }, 51 .pddr = MCFSIM_PBDDR, 52 .podr = MCFSIM_PBDAT, 53 .ppdr = MCFSIM_PBDAT, 54 }, 55 { 56 .gpio_chip = { 57 .label = "PC", 58 .request = mcf_gpio_request, 59 .free = mcf_gpio_free, 60 .direction_input = mcf_gpio_direction_input, 61 .direction_output = mcf_gpio_direction_output, 62 .get = mcf_gpio_get_value, 63 .set = mcf_gpio_set_value, 64 .base = 32, 65 .ngpio = 16, 66 }, 67 .pddr = MCFSIM_PCDDR, 68 .podr = MCFSIM_PCDAT, 69 .ppdr = MCFSIM_PCDAT, 70 }, 71}; 72 73static int __init mcf_gpio_init(void) 74{ 75 unsigned i = 0; 76 while (i < ARRAY_SIZE(mcf_gpio_chips)) 77 (void)gpiochip_add((struct gpio_chip *)&mcf_gpio_chips[i++]); 78 return 0; 79} 80 81core_initcall(mcf_gpio_init); 82