Commit 6efaf7cb authored by Linus Walleij's avatar Linus Walleij

Merge tag 'samsung-pinctrl-4.13' of...

Merge tag 'samsung-pinctrl-4.13' of git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/samsung into devel

Samsung pinctrl drivers update for v4.13:
1. Split drivers per ARMv7 and ARMv8 architectures because there
   is no need to compile everything on each of them.
2. Fix for possible NULL-pointer dereference after memory allocation
   failure.
3. Cleanups (silencing cast warnings, constify, removal of unneeded
   casts, removal of modular boiler-plate).
parents def8e228 a453f369
...@@ -10,6 +10,16 @@ config PINCTRL_EXYNOS ...@@ -10,6 +10,16 @@ config PINCTRL_EXYNOS
bool "Pinctrl driver data for Samsung EXYNOS SoCs other than 5440" bool "Pinctrl driver data for Samsung EXYNOS SoCs other than 5440"
depends on OF && GPIOLIB && (ARCH_EXYNOS || ARCH_S5PV210) depends on OF && GPIOLIB && (ARCH_EXYNOS || ARCH_S5PV210)
select PINCTRL_SAMSUNG select PINCTRL_SAMSUNG
select PINCTRL_EXYNOS_ARM if ARM && (ARCH_EXYNOS || ARCH_S5PV210)
select PINCTRL_EXYNOS_ARM64 if ARM64 && ARCH_EXYNOS
config PINCTRL_EXYNOS_ARM
bool "ARMv7-specific pinctrl driver data for Exynos (except Exynos5440)" if COMPILE_TEST
depends on PINCTRL_EXYNOS
config PINCTRL_EXYNOS_ARM64
bool "ARMv8-specific pinctrl driver data for Exynos" if COMPILE_TEST
depends on PINCTRL_EXYNOS
config PINCTRL_EXYNOS5440 config PINCTRL_EXYNOS5440
bool "Samsung EXYNOS5440 SoC pinctrl driver" bool "Samsung EXYNOS5440 SoC pinctrl driver"
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
obj-$(CONFIG_PINCTRL_SAMSUNG) += pinctrl-samsung.o obj-$(CONFIG_PINCTRL_SAMSUNG) += pinctrl-samsung.o
obj-$(CONFIG_PINCTRL_EXYNOS) += pinctrl-exynos.o obj-$(CONFIG_PINCTRL_EXYNOS) += pinctrl-exynos.o
obj-$(CONFIG_PINCTRL_EXYNOS_ARM) += pinctrl-exynos-arm.o
obj-$(CONFIG_PINCTRL_EXYNOS_ARM64) += pinctrl-exynos-arm64.o
obj-$(CONFIG_PINCTRL_EXYNOS5440) += pinctrl-exynos5440.o obj-$(CONFIG_PINCTRL_EXYNOS5440) += pinctrl-exynos5440.o
obj-$(CONFIG_PINCTRL_S3C24XX) += pinctrl-s3c24xx.o obj-$(CONFIG_PINCTRL_S3C24XX) += pinctrl-s3c24xx.o
obj-$(CONFIG_PINCTRL_S3C64XX) += pinctrl-s3c64xx.o obj-$(CONFIG_PINCTRL_S3C64XX) += pinctrl-s3c64xx.o
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -17,6 +17,9 @@ ...@@ -17,6 +17,9 @@
* (at your option) any later version. * (at your option) any later version.
*/ */
#ifndef __PINCTRL_SAMSUNG_EXYNOS_H
#define __PINCTRL_SAMSUNG_EXYNOS_H
/* External GPIO and wakeup interrupt related definitions */ /* External GPIO and wakeup interrupt related definitions */
#define EXYNOS_GPIO_ECON_OFFSET 0x700 #define EXYNOS_GPIO_ECON_OFFSET 0x700
#define EXYNOS_GPIO_EFLTCON_OFFSET 0x800 #define EXYNOS_GPIO_EFLTCON_OFFSET 0x800
...@@ -131,3 +134,13 @@ struct exynos_muxed_weint_data { ...@@ -131,3 +134,13 @@ struct exynos_muxed_weint_data {
unsigned int nr_banks; unsigned int nr_banks;
struct samsung_pin_bank *banks[]; struct samsung_pin_bank *banks[];
}; };
int exynos_eint_gpio_init(struct samsung_pinctrl_drv_data *d);
int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d);
void exynos_pinctrl_suspend(struct samsung_pinctrl_drv_data *drvdata);
void exynos_pinctrl_resume(struct samsung_pinctrl_drv_data *drvdata);
struct samsung_retention_ctrl *
exynos_retention_init(struct samsung_pinctrl_drv_data *drvdata,
const struct samsung_retention_data *data);
#endif /* __PINCTRL_SAMSUNG_EXYNOS_H */
/* /*
* pin-controller/pin-mux/pin-config/gpio-driver for Samsung's EXYNOS5440 SoC. * pin-controller/pin-mux/pin-config/gpio-driver for Samsung's EXYNOS5440 SoC.
* *
* Author: Thomas Abraham <thomas.ab@samsung.com>
*
* Copyright (c) 2012 Samsung Electronics Co., Ltd. * Copyright (c) 2012 Samsung Electronics Co., Ltd.
* http://www.samsung.com * http://www.samsung.com
* *
...@@ -10,7 +12,7 @@ ...@@ -10,7 +12,7 @@
* (at your option) any later version. * (at your option) any later version.
*/ */
#include <linux/module.h> #include <linux/init.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/slab.h> #include <linux/slab.h>
...@@ -991,7 +993,6 @@ static const struct of_device_id exynos5440_pinctrl_dt_match[] = { ...@@ -991,7 +993,6 @@ static const struct of_device_id exynos5440_pinctrl_dt_match[] = {
{ .compatible = "samsung,exynos5440-pinctrl" }, { .compatible = "samsung,exynos5440-pinctrl" },
{}, {},
}; };
MODULE_DEVICE_TABLE(of, exynos5440_pinctrl_dt_match);
static struct platform_driver exynos5440_pinctrl_driver = { static struct platform_driver exynos5440_pinctrl_driver = {
.probe = exynos5440_pinctrl_probe, .probe = exynos5440_pinctrl_probe,
...@@ -1007,13 +1008,3 @@ static int __init exynos5440_pinctrl_drv_register(void) ...@@ -1007,13 +1008,3 @@ static int __init exynos5440_pinctrl_drv_register(void)
return platform_driver_register(&exynos5440_pinctrl_driver); return platform_driver_register(&exynos5440_pinctrl_driver);
} }
postcore_initcall(exynos5440_pinctrl_drv_register); postcore_initcall(exynos5440_pinctrl_drv_register);
static void __exit exynos5440_pinctrl_drv_unregister(void)
{
platform_driver_unregister(&exynos5440_pinctrl_driver);
}
module_exit(exynos5440_pinctrl_drv_unregister);
MODULE_AUTHOR("Thomas Abraham <thomas.ab@samsung.com>");
MODULE_DESCRIPTION("Samsung EXYNOS5440 SoC pinctrl driver");
MODULE_LICENSE("GPL v2");
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
* external gpio and wakeup interrupt support. * external gpio and wakeup interrupt support.
*/ */
#include <linux/module.h> #include <linux/init.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irqdomain.h> #include <linux/irqdomain.h>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* external gpio and wakeup interrupt support. * external gpio and wakeup interrupt support.
*/ */
#include <linux/module.h> #include <linux/init.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irqdomain.h> #include <linux/irqdomain.h>
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
* and wakeup interrupts can be hooked to. * and wakeup interrupts can be hooked to.
*/ */
#include <linux/module.h> #include <linux/init.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/slab.h> #include <linux/slab.h>
...@@ -1183,27 +1183,29 @@ static int __maybe_unused samsung_pinctrl_resume(struct device *dev) ...@@ -1183,27 +1183,29 @@ static int __maybe_unused samsung_pinctrl_resume(struct device *dev)
} }
static const struct of_device_id samsung_pinctrl_dt_match[] = { static const struct of_device_id samsung_pinctrl_dt_match[] = {
#ifdef CONFIG_PINCTRL_EXYNOS #ifdef CONFIG_PINCTRL_EXYNOS_ARM
{ .compatible = "samsung,exynos3250-pinctrl", { .compatible = "samsung,exynos3250-pinctrl",
.data = (void *)exynos3250_pin_ctrl }, .data = exynos3250_pin_ctrl },
{ .compatible = "samsung,exynos4210-pinctrl", { .compatible = "samsung,exynos4210-pinctrl",
.data = (void *)exynos4210_pin_ctrl }, .data = exynos4210_pin_ctrl },
{ .compatible = "samsung,exynos4x12-pinctrl", { .compatible = "samsung,exynos4x12-pinctrl",
.data = (void *)exynos4x12_pin_ctrl }, .data = exynos4x12_pin_ctrl },
{ .compatible = "samsung,exynos5250-pinctrl", { .compatible = "samsung,exynos5250-pinctrl",
.data = (void *)exynos5250_pin_ctrl }, .data = exynos5250_pin_ctrl },
{ .compatible = "samsung,exynos5260-pinctrl", { .compatible = "samsung,exynos5260-pinctrl",
.data = (void *)exynos5260_pin_ctrl }, .data = exynos5260_pin_ctrl },
{ .compatible = "samsung,exynos5410-pinctrl", { .compatible = "samsung,exynos5410-pinctrl",
.data = (void *)exynos5410_pin_ctrl }, .data = exynos5410_pin_ctrl },
{ .compatible = "samsung,exynos5420-pinctrl", { .compatible = "samsung,exynos5420-pinctrl",
.data = (void *)exynos5420_pin_ctrl }, .data = exynos5420_pin_ctrl },
{ .compatible = "samsung,exynos5433-pinctrl",
.data = (void *)exynos5433_pin_ctrl },
{ .compatible = "samsung,s5pv210-pinctrl", { .compatible = "samsung,s5pv210-pinctrl",
.data = (void *)s5pv210_pin_ctrl }, .data = s5pv210_pin_ctrl },
#endif
#ifdef CONFIG_PINCTRL_EXYNOS_ARM64
{ .compatible = "samsung,exynos5433-pinctrl",
.data = exynos5433_pin_ctrl },
{ .compatible = "samsung,exynos7-pinctrl", { .compatible = "samsung,exynos7-pinctrl",
.data = (void *)exynos7_pin_ctrl }, .data = exynos7_pin_ctrl },
#endif #endif
#ifdef CONFIG_PINCTRL_S3C64XX #ifdef CONFIG_PINCTRL_S3C64XX
{ .compatible = "samsung,s3c64xx-pinctrl", { .compatible = "samsung,s3c64xx-pinctrl",
...@@ -1221,7 +1223,6 @@ static const struct of_device_id samsung_pinctrl_dt_match[] = { ...@@ -1221,7 +1223,6 @@ static const struct of_device_id samsung_pinctrl_dt_match[] = {
#endif #endif
{}, {},
}; };
MODULE_DEVICE_TABLE(of, samsung_pinctrl_dt_match);
static const struct dev_pm_ops samsung_pinctrl_pm_ops = { static const struct dev_pm_ops samsung_pinctrl_pm_ops = {
SET_LATE_SYSTEM_SLEEP_PM_OPS(samsung_pinctrl_suspend, SET_LATE_SYSTEM_SLEEP_PM_OPS(samsung_pinctrl_suspend,
...@@ -1243,13 +1244,3 @@ static int __init samsung_pinctrl_drv_register(void) ...@@ -1243,13 +1244,3 @@ static int __init samsung_pinctrl_drv_register(void)
return platform_driver_register(&samsung_pinctrl_driver); return platform_driver_register(&samsung_pinctrl_driver);
} }
postcore_initcall(samsung_pinctrl_drv_register); postcore_initcall(samsung_pinctrl_drv_register);
static void __exit samsung_pinctrl_drv_unregister(void)
{
platform_driver_unregister(&samsung_pinctrl_driver);
}
module_exit(samsung_pinctrl_drv_unregister);
MODULE_AUTHOR("Thomas Abraham <thomas.ab@samsung.com>");
MODULE_DESCRIPTION("Samsung pinctrl driver");
MODULE_LICENSE("GPL v2");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment