Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.11 84 lines 2.0 kB view raw
1/* 2 * MOXA ART SoCs GPIO driver. 3 * 4 * Copyright (C) 2013 Jonas Jensen 5 * 6 * Jonas Jensen <jonas.jensen@gmail.com> 7 * 8 * This file is licensed under the terms of the GNU General Public 9 * License version 2. This program is licensed "as is" without any 10 * warranty of any kind, whether express or implied. 11 */ 12 13#include <linux/err.h> 14#include <linux/init.h> 15#include <linux/irq.h> 16#include <linux/io.h> 17#include <linux/platform_device.h> 18#include <linux/of_address.h> 19#include <linux/of_gpio.h> 20#include <linux/pinctrl/consumer.h> 21#include <linux/delay.h> 22#include <linux/timer.h> 23#include <linux/bitops.h> 24#include <linux/gpio/driver.h> 25 26#define GPIO_DATA_OUT 0x00 27#define GPIO_DATA_IN 0x04 28#define GPIO_PIN_DIRECTION 0x08 29 30static int moxart_gpio_probe(struct platform_device *pdev) 31{ 32 struct device *dev = &pdev->dev; 33 struct resource *res; 34 struct gpio_chip *gc; 35 void __iomem *base; 36 int ret; 37 38 gc = devm_kzalloc(dev, sizeof(*gc), GFP_KERNEL); 39 if (!gc) 40 return -ENOMEM; 41 42 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 43 base = devm_ioremap_resource(dev, res); 44 if (IS_ERR(base)) 45 return PTR_ERR(base); 46 47 ret = bgpio_init(gc, dev, 4, base + GPIO_DATA_IN, 48 base + GPIO_DATA_OUT, NULL, 49 base + GPIO_PIN_DIRECTION, NULL, 50 BGPIOF_READ_OUTPUT_REG_SET); 51 if (ret) { 52 dev_err(&pdev->dev, "bgpio_init failed\n"); 53 return ret; 54 } 55 56 gc->label = "moxart-gpio"; 57 gc->request = gpiochip_generic_request; 58 gc->free = gpiochip_generic_free; 59 gc->base = 0; 60 gc->owner = THIS_MODULE; 61 62 ret = devm_gpiochip_add_data(dev, gc, NULL); 63 if (ret) { 64 dev_err(dev, "%s: gpiochip_add failed\n", 65 dev->of_node->full_name); 66 return ret; 67 } 68 69 return ret; 70} 71 72static const struct of_device_id moxart_gpio_match[] = { 73 { .compatible = "moxa,moxart-gpio" }, 74 { } 75}; 76 77static struct platform_driver moxart_gpio_driver = { 78 .driver = { 79 .name = "moxart-gpio", 80 .of_match_table = moxart_gpio_match, 81 }, 82 .probe = moxart_gpio_probe, 83}; 84builtin_platform_driver(moxart_gpio_driver);