1316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com/* 2316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com * Coldfire generic GPIO support 3316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com * 4316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com * (C) Copyright 2009, Steven King <sfking@fdwdc.com> 5316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com * 6316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com * This program is free software; you can redistribute it and/or modify 7316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com * it under the terms of the GNU General Public License as published by 8316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com * the Free Software Foundation; version 2 of the License. 9316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com * 10316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com * This program is distributed in the hope that it will be useful, 11316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com * but WITHOUT ANY WARRANTY; without even the implied warranty of 12316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com * GNU General Public License for more details. 14316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com*/ 15316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com 16316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com#include <linux/kernel.h> 17316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com#include <linux/init.h> 18316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com 19316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com#include <asm/coldfire.h> 20316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com#include <asm/mcfsim.h> 21316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com#include <asm/mcfgpio.h> 22316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com 23316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.comstatic struct mcf_gpio_chip mcf_gpio_chips[] = { 24316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com { 25316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .gpio_chip = { 26316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .label = "PA", 27316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .request = mcf_gpio_request, 28316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .free = mcf_gpio_free, 29316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .direction_input = mcf_gpio_direction_input, 30316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .direction_output = mcf_gpio_direction_output, 31316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .get = mcf_gpio_get_value, 32316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .set = mcf_gpio_set_value, 33316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .ngpio = 16, 34316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com }, 354d1f692f3002b580b1fd49fba74c1b7c5c123a9cGreg Ungerer .pddr = (void __iomem *) MCFSIM_PADDR, 364d1f692f3002b580b1fd49fba74c1b7c5c123a9cGreg Ungerer .podr = (void __iomem *) MCFSIM_PADAT, 374d1f692f3002b580b1fd49fba74c1b7c5c123a9cGreg Ungerer .ppdr = (void __iomem *) MCFSIM_PADAT, 38316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com }, 39316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com { 40316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .gpio_chip = { 41316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .label = "PB", 42316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .request = mcf_gpio_request, 43316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .free = mcf_gpio_free, 44316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .direction_input = mcf_gpio_direction_input, 45316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .direction_output = mcf_gpio_direction_output, 46316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .get = mcf_gpio_get_value, 47316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .set = mcf_gpio_set_value, 48316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .base = 16, 49316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .ngpio = 16, 50316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com }, 514d1f692f3002b580b1fd49fba74c1b7c5c123a9cGreg Ungerer .pddr = (void __iomem *) MCFSIM_PBDDR, 524d1f692f3002b580b1fd49fba74c1b7c5c123a9cGreg Ungerer .podr = (void __iomem *) MCFSIM_PBDAT, 534d1f692f3002b580b1fd49fba74c1b7c5c123a9cGreg Ungerer .ppdr = (void __iomem *) MCFSIM_PBDAT, 54316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com }, 55316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com { 56316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .gpio_chip = { 57316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .label = "PC", 58316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .request = mcf_gpio_request, 59316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .free = mcf_gpio_free, 60316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .direction_input = mcf_gpio_direction_input, 61316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .direction_output = mcf_gpio_direction_output, 62316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .get = mcf_gpio_get_value, 63316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .set = mcf_gpio_set_value, 64316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .base = 32, 65316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com .ngpio = 16, 66316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com }, 674d1f692f3002b580b1fd49fba74c1b7c5c123a9cGreg Ungerer .pddr = (void __iomem *) MCFSIM_PCDDR, 684d1f692f3002b580b1fd49fba74c1b7c5c123a9cGreg Ungerer .podr = (void __iomem *) MCFSIM_PCDAT, 694d1f692f3002b580b1fd49fba74c1b7c5c123a9cGreg Ungerer .ppdr = (void __iomem *) MCFSIM_PCDAT, 70316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com }, 71316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com}; 72316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com 73316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.comstatic int __init mcf_gpio_init(void) 74316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com{ 75316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com unsigned i = 0; 76316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com while (i < ARRAY_SIZE(mcf_gpio_chips)) 77316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com (void)gpiochip_add((struct gpio_chip *)&mcf_gpio_chips[i++]); 78316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com return 0; 79316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com} 80316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.com 81316f2c483c32e9385329303258d12e6e33892af5sfking@fdwdc.comcore_initcall(mcf_gpio_init); 82