From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Peter Hung <hpeter@gmail.com>,
linus.walleij@linaro.org, gnurou@gmail.com,
gregkh@linuxfoundation.org, paul.gortmaker@windriver.com,
lee.jones@linaro.org, jslaby@suse.com, peter_hong@fintek.com.tw
Cc: heikki.krogerus@linux.intel.com, peter@hurleysoftware.com,
soeren.grunewald@desy.de, udknight@gmail.com,
adam.lee@canonical.com, arnd@arndb.de, manabian@gmail.com,
scottwood@freescale.com, yamada.masahiro@socionext.com,
paul.burton@imgtec.com, mans@mansr.com, matthias.bgg@gmail.com,
ralf@linux-mips.org, linux-kernel@vger.kernel.org,
linux-gpio@vger.kernel.org, linux-serial@vger.kernel.org,
tom_tsai@fintek.com.tw,
Peter Hung <hpeter+linux_kernel@gmail.com>
Subject: Re: [PATCH V2 2/4] gpio: gpio-f81504: Add Fintek F81504/508/512 PCIE-to-UART/GPIO GPIOLIB support
Date: Thu, 28 Jan 2016 14:03:04 +0200 [thread overview]
Message-ID: <1453982584.2521.285.camel@linux.intel.com> (raw)
In-Reply-To: <1453972838-30268-3-git-send-email-hpeter+linux_kernel@gmail.com>
On Thu, 2016-01-28 at 17:20 +0800, Peter Hung wrote:
> This driver is GPIOLIB driver for F81504/508/512, it'll handle the
> GPIOLIB operation of this device. This module will depend on
> MFD_FINTEK_F81504_CORE.
>
> + /*
> + * The GPIO default driven mode for this device is open-
> drain. The
> + * GPIOLIB had no change GPIO mode API currently. So we
> leave the
> + * Push-Pull code below.
> + *
> + * pci_read_config_byte(dev, GPIO_START_ADDR + idx *
> GPIO_SET_OFFSET +
> + * GPIO_DRIVE_EN_OFFSET, &tmp);
> + * pci_write_config_byte(dev, GPIO_START_ADDR + idx *
> GPIO_SET_OFFSET +
> + * GPIO_DRIVE_EN_OFFSET, tmp |
> BIT(gpio_num));
> + */
> +
> + /* set output data */
> + tmp = inb(priv->gpio_ioaddr + gc->idx);
ioread8 is a bit better since it automatically works with IO space and
MMIO. But if you are certain you will always have the address in IO
space, you can disregard this comment.
> +static int f81504_gpio_probe(struct platform_device *pdev)
> +{
> + int status;
> + struct f81504_gpio_chip *gc;
> + void *data = dev_get_platdata(&pdev->dev);
> + u8 gpio_idx = *(u8 *)data;
> + char *name;
> +
> + if (gpio_idx >= ARRAY_SIZE(fintek_gpio_mapping)) {
> + dev_err(&pdev->dev, "%s: gpio_idx:%d out of
> range.\n",
> + __func__, gpio_idx);
> + return -ENODEV;
> + }
> +
> + gc = devm_kzalloc(&pdev->dev, sizeof(*gc), GFP_KERNEL);
> + if (!gc)
> + return -ENOMEM;
> +
>
> + kfree(data);
What the heck?
> + mutex_init(&gc->locker);
> + platform_set_drvdata(pdev, gc);
> +
> + name = devm_kzalloc(&pdev->dev, FINTEK_GPIO_NAME_LEN,
> GFP_KERNEL);
> + if (!name)
> + return -ENOMEM;
> +
> + /* This will display like as GPIO-1x */
> + sprintf(name, "%s-%dx", FINTEK_GPIO_DISPLAY, gpio_idx);
> +
> + gc->chip.owner = THIS_MODULE;
> + gc->chip.label = name;
> + gc->chip.ngpio = 8;
> + gc->chip.dev = &pdev->dev;
> + gc->chip.get = f81504_gpio_get;
> + gc->chip.set = f81504_gpio_set;
> + gc->chip.direction_input = f81504_gpio_direction_in;
> + gc->chip.direction_output = f81504_gpio_direction_out;
> + gc->chip.get_direction = f81504_gpio_get_direction;
> + gc->chip.can_sleep = 1;
> + gc->chip.base = -1;
> + gc->idx = gpio_idx;
> +
>
> + status = gpiochip_add(&gc->chip);
> + if (status) {
> + dev_err(&pdev->dev, "%s: gpiochip_add failed: %d\n",
> __func__,
> + status);
> + return -ENOMEM;
You ignored the status.
> + }
> +
> + return 0;
Perhaps just
return gpiochip_add(); ?
> +}
> +
> +static int f81504_gpio_remove(struct platform_device *pdev)
> +{
> + struct f81504_gpio_chip *gc = platform_get_drvdata(pdev);
> +
> + gpiochip_remove(&gc->chip);
> + return 0;
> +}
> +
> +static SIMPLE_DEV_PM_OPS(f81504_gpio_pm_ops, f81504_gpio_suspend,
> + f81504_gpio_resume);
> +
> +static struct platform_driver f81504_gpio_driver = {
> + .driver = {
> + .name = F81504_GPIO_NAME,
> + .owner = THIS_MODULE,
> + .pm = &f81504_gpio_pm_ops,
> + },
> + .probe = f81504_gpio_probe,
> + .remove = f81504_gpio_remove,
> +};
> +
> +module_platform_driver(f81504_gpio_driver);
> +
> +MODULE_AUTHOR("Peter Hong <Peter_Hong@fintek.com.tw>");
> +MODULE_DESCRIPTION("Fintek F81504/508/512 PCIE GPIOLIB driver");
> +MODULE_LICENSE("GPL");
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
next prev parent reply other threads:[~2016-01-28 12:03 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-28 9:20 [PATCH V2 0/4] Transform Fintek PCIE driver from 8250 to MFD Peter Hung
2016-01-28 9:20 ` [PATCH V2 1/4] mfd: f81504-core: Add Fintek F81504/508/512 PCIE-to-UART/GPIO core support Peter Hung
2016-01-28 10:04 ` One Thousand Gnomes
2016-01-29 2:22 ` Peter Hung
2016-01-28 11:55 ` Andy Shevchenko
2016-01-29 5:50 ` Peter Hung
2016-01-29 8:21 ` Lee Jones
2016-01-29 8:21 ` Lee Jones
2016-01-29 12:47 ` Andy Shevchenko
2016-02-01 8:29 ` Lee Jones
2016-01-29 13:41 ` Andy Shevchenko
2016-02-01 2:51 ` Peter Hung
2016-02-01 2:51 ` Peter Hung
2016-01-28 9:20 ` [PATCH V2 2/4] gpio: gpio-f81504: Add Fintek F81504/508/512 PCIE-to-UART/GPIO GPIOLIB support Peter Hung
2016-01-28 9:54 ` [PATCH] gpio: gpio-f81504: fix platform_no_drv_owner.cocci warnings kbuild test robot
2016-01-28 9:54 ` [PATCH V2 2/4] gpio: gpio-f81504: Add Fintek F81504/508/512 PCIE-to-UART/GPIO GPIOLIB support kbuild test robot
2016-01-28 12:03 ` Andy Shevchenko [this message]
2016-01-29 8:15 ` Peter Hung
2016-01-29 8:15 ` Peter Hung
2016-02-10 9:08 ` Linus Walleij
2016-02-10 9:08 ` Linus Walleij
2016-02-16 7:03 ` Peter Hung
2016-02-16 7:03 ` Peter Hung
2016-01-28 9:20 ` [PATCH V2 3/4] 8250: 8250_f81504: Add Fintek F81504/508/512 PCIE-to-UART/GPIO UART support Peter Hung
2016-01-28 10:17 ` One Thousand Gnomes
2016-01-28 11:06 ` kbuild test robot
2016-01-28 11:06 ` [PATCH] 8250: 8250_f81504: fix platform_no_drv_owner.cocci warnings kbuild test robot
2016-01-28 9:20 ` [PATCH V2 4/4] serial: 8250_pci: Remove Fintek F81504/508/512 UART driver Peter Hung
2016-01-28 12:04 ` Andy Shevchenko
2016-01-29 8:20 ` Peter Hung
2016-01-29 8:20 ` Peter Hung
2016-01-29 12:40 ` Andy Shevchenko
2016-01-29 12:40 ` Andy Shevchenko
2016-02-01 3:33 ` Peter Hung
2016-02-01 3:33 ` Peter Hung
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1453982584.2521.285.camel@linux.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=adam.lee@canonical.com \
--cc=arnd@arndb.de \
--cc=gnurou@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=hpeter+linux_kernel@gmail.com \
--cc=hpeter@gmail.com \
--cc=jslaby@suse.com \
--cc=lee.jones@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=manabian@gmail.com \
--cc=mans@mansr.com \
--cc=matthias.bgg@gmail.com \
--cc=paul.burton@imgtec.com \
--cc=paul.gortmaker@windriver.com \
--cc=peter@hurleysoftware.com \
--cc=peter_hong@fintek.com.tw \
--cc=ralf@linux-mips.org \
--cc=scottwood@freescale.com \
--cc=soeren.grunewald@desy.de \
--cc=tom_tsai@fintek.com.tw \
--cc=udknight@gmail.com \
--cc=yamada.masahiro@socionext.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.