mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
gpio: mmio: Make use of device properties
Convert the module to be property provider agnostic and allow it to be used on non-OF platforms. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
This commit is contained in:
committed by
Bartosz Golaszewski
parent
12b7f4ddfc
commit
001cf2dec3
@@ -58,7 +58,6 @@ o ` ~~~~\___/~~~~ ` controller in FPGA is ,.`
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
#include "gpiolib.h"
|
||||
|
||||
@@ -688,7 +687,6 @@ static void __iomem *bgpio_map(struct platform_device *pdev,
|
||||
return devm_ioremap_resource(&pdev->dev, r);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static const struct of_device_id bgpio_of_match[] = {
|
||||
{ .compatible = "brcm,bcm6345-gpio" },
|
||||
{ .compatible = "wd,mbl-gpio" },
|
||||
@@ -697,36 +695,27 @@ static const struct of_device_id bgpio_of_match[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, bgpio_of_match);
|
||||
|
||||
static struct bgpio_pdata *bgpio_parse_dt(struct platform_device *pdev,
|
||||
unsigned long *flags)
|
||||
static struct bgpio_pdata *bgpio_parse_fw(struct device *dev, unsigned long *flags)
|
||||
{
|
||||
struct bgpio_pdata *pdata;
|
||||
|
||||
if (!pdev->dev.of_node)
|
||||
if (!dev_fwnode(dev))
|
||||
return NULL;
|
||||
|
||||
pdata = devm_kzalloc(&pdev->dev, sizeof(struct bgpio_pdata),
|
||||
GFP_KERNEL);
|
||||
pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
|
||||
if (!pdata)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
pdata->base = -1;
|
||||
|
||||
if (of_device_is_big_endian(pdev->dev.of_node))
|
||||
if (device_is_big_endian(dev))
|
||||
*flags |= BGPIOF_BIG_ENDIAN_BYTE_ORDER;
|
||||
|
||||
if (of_property_read_bool(pdev->dev.of_node, "no-output"))
|
||||
if (device_property_read_bool(dev, "no-output"))
|
||||
*flags |= BGPIOF_NO_OUTPUT;
|
||||
|
||||
return pdata;
|
||||
}
|
||||
#else
|
||||
static struct bgpio_pdata *bgpio_parse_dt(struct platform_device *pdev,
|
||||
unsigned long *flags)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif /* CONFIG_OF */
|
||||
|
||||
static int bgpio_pdev_probe(struct platform_device *pdev)
|
||||
{
|
||||
@@ -743,7 +732,7 @@ static int bgpio_pdev_probe(struct platform_device *pdev)
|
||||
struct gpio_chip *gc;
|
||||
struct bgpio_pdata *pdata;
|
||||
|
||||
pdata = bgpio_parse_dt(pdev, &flags);
|
||||
pdata = bgpio_parse_fw(dev, &flags);
|
||||
if (IS_ERR(pdata))
|
||||
return PTR_ERR(pdata);
|
||||
|
||||
@@ -814,7 +803,7 @@ MODULE_DEVICE_TABLE(platform, bgpio_id_table);
|
||||
static struct platform_driver bgpio_driver = {
|
||||
.driver = {
|
||||
.name = "basic-mmio-gpio",
|
||||
.of_match_table = of_match_ptr(bgpio_of_match),
|
||||
.of_match_table = bgpio_of_match,
|
||||
},
|
||||
.id_table = bgpio_id_table,
|
||||
.probe = bgpio_pdev_probe,
|
||||
|
||||
Reference in New Issue
Block a user