diff options
-rw-r--r-- | Documentation/devicetree/bindings/gpio/gpio-samsung.txt | 43 | ||||
-rw-r--r-- | drivers/gpio/gpio-samsung.c | 63 |
2 files changed, 0 insertions, 106 deletions
diff --git a/Documentation/devicetree/bindings/gpio/gpio-samsung.txt b/Documentation/devicetree/bindings/gpio/gpio-samsung.txt index f1e5dfecf55d..5375625e8cd2 100644 --- a/Documentation/devicetree/bindings/gpio/gpio-samsung.txt +++ b/Documentation/devicetree/bindings/gpio/gpio-samsung.txt | |||
@@ -39,46 +39,3 @@ Example: | |||
39 | #gpio-cells = <4>; | 39 | #gpio-cells = <4>; |
40 | gpio-controller; | 40 | gpio-controller; |
41 | }; | 41 | }; |
42 | |||
43 | |||
44 | Samsung S3C24XX GPIO Controller | ||
45 | |||
46 | Required properties: | ||
47 | - compatible: Compatible property value should be "samsung,s3c24xx-gpio". | ||
48 | |||
49 | - reg: Physical base address of the controller and length of memory mapped | ||
50 | region. | ||
51 | |||
52 | - #gpio-cells: Should be 3. The syntax of the gpio specifier used by client nodes | ||
53 | should be the following with values derived from the SoC user manual. | ||
54 | <[phandle of the gpio controller node] | ||
55 | [pin number within the gpio controller] | ||
56 | [mux function] | ||
57 | [flags and pull up/down] | ||
58 | |||
59 | Values for gpio specifier: | ||
60 | - Pin number: depending on the controller a number from 0 up to 15. | ||
61 | - Mux function: Depending on the SoC and the gpio bank the gpio can be set | ||
62 | as input, output or a special function | ||
63 | - Flags and Pull Up/Down: the values to use differ for the individual SoCs | ||
64 | example S3C2416/S3C2450: | ||
65 | 0 - Pull Up/Down Disabled. | ||
66 | 1 - Pull Down Enabled. | ||
67 | 2 - Pull Up Enabled. | ||
68 | Bit 16 (0x00010000) - Input is active low. | ||
69 | Consult the user manual for the correct values of Mux and Pull Up/Down. | ||
70 | |||
71 | - gpio-controller: Specifies that the node is a gpio controller. | ||
72 | - #address-cells: should be 1. | ||
73 | - #size-cells: should be 1. | ||
74 | |||
75 | Example: | ||
76 | |||
77 | gpa: gpio-controller@56000000 { | ||
78 | #address-cells = <1>; | ||
79 | #size-cells = <1>; | ||
80 | compatible = "samsung,s3c24xx-gpio"; | ||
81 | reg = <0x56000000 0x10>; | ||
82 | #gpio-cells = <3>; | ||
83 | gpio-controller; | ||
84 | }; | ||
diff --git a/drivers/gpio/gpio-samsung.c b/drivers/gpio/gpio-samsung.c index b22ca7933745..96f6a7c7a326 100644 --- a/drivers/gpio/gpio-samsung.c +++ b/drivers/gpio/gpio-samsung.c | |||
@@ -933,67 +933,6 @@ static void __init samsung_gpiolib_add(struct samsung_gpio_chip *chip) | |||
933 | s3c_gpiolib_track(chip); | 933 | s3c_gpiolib_track(chip); |
934 | } | 934 | } |
935 | 935 | ||
936 | #if defined(CONFIG_PLAT_S3C24XX) && defined(CONFIG_OF) | ||
937 | static int s3c24xx_gpio_xlate(struct gpio_chip *gc, | ||
938 | const struct of_phandle_args *gpiospec, u32 *flags) | ||
939 | { | ||
940 | unsigned int pin; | ||
941 | |||
942 | if (WARN_ON(gc->of_gpio_n_cells < 3)) | ||
943 | return -EINVAL; | ||
944 | |||
945 | if (WARN_ON(gpiospec->args_count < gc->of_gpio_n_cells)) | ||
946 | return -EINVAL; | ||
947 | |||
948 | if (gpiospec->args[0] > gc->ngpio) | ||
949 | return -EINVAL; | ||
950 | |||
951 | pin = gc->base + gpiospec->args[0]; | ||
952 | |||
953 | if (s3c_gpio_cfgpin(pin, S3C_GPIO_SFN(gpiospec->args[1]))) | ||
954 | pr_warn("gpio_xlate: failed to set pin function\n"); | ||
955 | if (s3c_gpio_setpull(pin, gpiospec->args[2] & 0xffff)) | ||
956 | pr_warn("gpio_xlate: failed to set pin pull up/down\n"); | ||
957 | |||
958 | if (flags) | ||
959 | *flags = gpiospec->args[2] >> 16; | ||
960 | |||
961 | return gpiospec->args[0]; | ||
962 | } | ||
963 | |||
964 | static const struct of_device_id s3c24xx_gpio_dt_match[] __initdata = { | ||
965 | { .compatible = "samsung,s3c24xx-gpio", }, | ||
966 | {} | ||
967 | }; | ||
968 | |||
969 | static __init void s3c24xx_gpiolib_attach_ofnode(struct samsung_gpio_chip *chip, | ||
970 | u64 base, u64 offset) | ||
971 | { | ||
972 | struct gpio_chip *gc = &chip->chip; | ||
973 | u64 address; | ||
974 | |||
975 | if (!of_have_populated_dt()) | ||
976 | return; | ||
977 | |||
978 | address = chip->base ? base + ((u32)chip->base & 0xfff) : base + offset; | ||
979 | gc->of_node = of_find_matching_node_by_address(NULL, | ||
980 | s3c24xx_gpio_dt_match, address); | ||
981 | if (!gc->of_node) { | ||
982 | pr_info("gpio: device tree node not found for gpio controller" | ||
983 | " with base address %08llx\n", address); | ||
984 | return; | ||
985 | } | ||
986 | gc->of_gpio_n_cells = 3; | ||
987 | gc->of_xlate = s3c24xx_gpio_xlate; | ||
988 | } | ||
989 | #else | ||
990 | static __init void s3c24xx_gpiolib_attach_ofnode(struct samsung_gpio_chip *chip, | ||
991 | u64 base, u64 offset) | ||
992 | { | ||
993 | return; | ||
994 | } | ||
995 | #endif /* defined(CONFIG_PLAT_S3C24XX) && defined(CONFIG_OF) */ | ||
996 | |||
997 | static void __init s3c24xx_gpiolib_add_chips(struct samsung_gpio_chip *chip, | 936 | static void __init s3c24xx_gpiolib_add_chips(struct samsung_gpio_chip *chip, |
998 | int nr_chips, void __iomem *base) | 937 | int nr_chips, void __iomem *base) |
999 | { | 938 | { |
@@ -1018,8 +957,6 @@ static void __init s3c24xx_gpiolib_add_chips(struct samsung_gpio_chip *chip, | |||
1018 | gc->direction_output = samsung_gpiolib_2bit_output; | 957 | gc->direction_output = samsung_gpiolib_2bit_output; |
1019 | 958 | ||
1020 | samsung_gpiolib_add(chip); | 959 | samsung_gpiolib_add(chip); |
1021 | |||
1022 | s3c24xx_gpiolib_attach_ofnode(chip, S3C24XX_PA_GPIO, i * 0x10); | ||
1023 | } | 960 | } |
1024 | } | 961 | } |
1025 | 962 | ||