diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2014-05-23 18:45:58 -0400 |
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2014-05-23 18:46:05 -0400 |
| commit | 34b16f74ebfb586d97e90bdb72f369aa5d8f16a1 (patch) | |
| tree | c5c8e78ff361ab50bf98f8c0fa35c57d8506ffae | |
| parent | efca0a3e85045da839320d7c5121f82d55be8b79 (diff) | |
| parent | 5d144e36b7c51612922fa05d37ff3a869261cc82 (diff) | |
Merge tag 'qcom-drivers-for-3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/galak/linux-qcom into next/drivers
Qualcomm ARM Based driver Updates for v3.16
* Introduce drivers/soc directory for misc SoC specific code
* Add driver to configure GSBI device
* tag 'qcom-drivers-for-3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/galak/linux-qcom:
soc: qcom: Add GSBI driver
soc: Introduce drivers/soc place-holder for SOC specific drivers
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
| -rw-r--r-- | drivers/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/Makefile | 3 | ||||
| -rw-r--r-- | drivers/soc/Kconfig | 5 | ||||
| -rw-r--r-- | drivers/soc/Makefile | 5 | ||||
| -rw-r--r-- | drivers/soc/qcom/Kconfig | 11 | ||||
| -rw-r--r-- | drivers/soc/qcom/Makefile | 1 | ||||
| -rw-r--r-- | drivers/soc/qcom/qcom_gsbi.c | 84 |
7 files changed, 111 insertions, 0 deletions
diff --git a/drivers/Kconfig b/drivers/Kconfig index 0a0a90f52d26..0e87a34b6472 100644 --- a/drivers/Kconfig +++ b/drivers/Kconfig | |||
| @@ -132,6 +132,8 @@ source "drivers/staging/Kconfig" | |||
| 132 | 132 | ||
| 133 | source "drivers/platform/Kconfig" | 133 | source "drivers/platform/Kconfig" |
| 134 | 134 | ||
| 135 | source "drivers/soc/Kconfig" | ||
| 136 | |||
| 135 | source "drivers/clk/Kconfig" | 137 | source "drivers/clk/Kconfig" |
| 136 | 138 | ||
| 137 | source "drivers/hwspinlock/Kconfig" | 139 | source "drivers/hwspinlock/Kconfig" |
diff --git a/drivers/Makefile b/drivers/Makefile index d05d81b19b50..e0c64454b96d 100644 --- a/drivers/Makefile +++ b/drivers/Makefile | |||
| @@ -33,6 +33,9 @@ obj-y += amba/ | |||
| 33 | # really early. | 33 | # really early. |
| 34 | obj-$(CONFIG_DMADEVICES) += dma/ | 34 | obj-$(CONFIG_DMADEVICES) += dma/ |
| 35 | 35 | ||
| 36 | # SOC specific infrastructure drivers. | ||
| 37 | obj-y += soc/ | ||
| 38 | |||
| 36 | obj-$(CONFIG_VIRTIO) += virtio/ | 39 | obj-$(CONFIG_VIRTIO) += virtio/ |
| 37 | obj-$(CONFIG_XEN) += xen/ | 40 | obj-$(CONFIG_XEN) += xen/ |
| 38 | 41 | ||
diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig new file mode 100644 index 000000000000..c8543855aa82 --- /dev/null +++ b/drivers/soc/Kconfig | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | menu "SOC (System On Chip) specific Drivers" | ||
| 2 | |||
| 3 | source "drivers/soc/qcom/Kconfig" | ||
| 4 | |||
| 5 | endmenu | ||
diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile new file mode 100644 index 000000000000..0f7c44793b29 --- /dev/null +++ b/drivers/soc/Makefile | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | # | ||
| 2 | # Makefile for the Linux Kernel SOC specific device drivers. | ||
| 3 | # | ||
| 4 | |||
| 5 | obj-$(CONFIG_ARCH_QCOM) += qcom/ | ||
diff --git a/drivers/soc/qcom/Kconfig b/drivers/soc/qcom/Kconfig new file mode 100644 index 000000000000..7bd2c94f54a4 --- /dev/null +++ b/drivers/soc/qcom/Kconfig | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | # | ||
| 2 | # QCOM Soc drivers | ||
| 3 | # | ||
| 4 | config QCOM_GSBI | ||
| 5 | tristate "QCOM General Serial Bus Interface" | ||
| 6 | depends on ARCH_QCOM | ||
| 7 | help | ||
| 8 | Say y here to enable GSBI support. The GSBI provides control | ||
| 9 | functions for connecting the underlying serial UART, SPI, and I2C | ||
| 10 | devices to the output pins. | ||
| 11 | |||
diff --git a/drivers/soc/qcom/Makefile b/drivers/soc/qcom/Makefile new file mode 100644 index 000000000000..438901257ac1 --- /dev/null +++ b/drivers/soc/qcom/Makefile | |||
| @@ -0,0 +1 @@ | |||
| obj-$(CONFIG_QCOM_GSBI) += qcom_gsbi.o | |||
diff --git a/drivers/soc/qcom/qcom_gsbi.c b/drivers/soc/qcom/qcom_gsbi.c new file mode 100644 index 000000000000..061dd0632dbd --- /dev/null +++ b/drivers/soc/qcom/qcom_gsbi.c | |||
| @@ -0,0 +1,84 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2014, The Linux foundation. All rights reserved. | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License rev 2 and | ||
| 6 | * only rev 2 as published by the free Software foundation. | ||
| 7 | * | ||
| 8 | * This program is distributed in the hope that it will be useful, | ||
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | * MERCHANTABILITY or fITNESS fOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <linux/clk.h> | ||
| 15 | #include <linux/err.h> | ||
| 16 | #include <linux/io.h> | ||
| 17 | #include <linux/module.h> | ||
| 18 | #include <linux/of.h> | ||
| 19 | #include <linux/of_platform.h> | ||
| 20 | #include <linux/platform_device.h> | ||
| 21 | |||
| 22 | #define GSBI_CTRL_REG 0x0000 | ||
| 23 | #define GSBI_PROTOCOL_SHIFT 4 | ||
| 24 | |||
| 25 | static int gsbi_probe(struct platform_device *pdev) | ||
| 26 | { | ||
| 27 | struct device_node *node = pdev->dev.of_node; | ||
| 28 | struct resource *res; | ||
| 29 | void __iomem *base; | ||
| 30 | struct clk *hclk; | ||
| 31 | u32 mode, crci = 0; | ||
| 32 | |||
| 33 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
| 34 | base = devm_ioremap_resource(&pdev->dev, res); | ||
| 35 | if (IS_ERR(base)) | ||
| 36 | return PTR_ERR(base); | ||
| 37 | |||
| 38 | if (of_property_read_u32(node, "qcom,mode", &mode)) { | ||
| 39 | dev_err(&pdev->dev, "missing mode configuration\n"); | ||
| 40 | return -EINVAL; | ||
| 41 | } | ||
| 42 | |||
| 43 | /* not required, so default to 0 if not present */ | ||
| 44 | of_property_read_u32(node, "qcom,crci", &crci); | ||
| 45 | |||
| 46 | dev_info(&pdev->dev, "GSBI port protocol: %d crci: %d\n", mode, crci); | ||
| 47 | |||
| 48 | hclk = devm_clk_get(&pdev->dev, "iface"); | ||
| 49 | if (IS_ERR(hclk)) | ||
| 50 | return PTR_ERR(hclk); | ||
| 51 | |||
| 52 | clk_prepare_enable(hclk); | ||
| 53 | |||
| 54 | writel_relaxed((mode << GSBI_PROTOCOL_SHIFT) | crci, | ||
| 55 | base + GSBI_CTRL_REG); | ||
| 56 | |||
| 57 | /* make sure the gsbi control write is not reordered */ | ||
| 58 | wmb(); | ||
| 59 | |||
| 60 | clk_disable_unprepare(hclk); | ||
| 61 | |||
| 62 | return of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); | ||
| 63 | } | ||
| 64 | |||
| 65 | static const struct of_device_id gsbi_dt_match[] = { | ||
| 66 | { .compatible = "qcom,gsbi-v1.0.0", }, | ||
| 67 | }; | ||
| 68 | |||
| 69 | MODULE_DEVICE_TABLE(of, gsbi_dt_match); | ||
| 70 | |||
| 71 | static struct platform_driver gsbi_driver = { | ||
| 72 | .driver = { | ||
| 73 | .name = "gsbi", | ||
| 74 | .owner = THIS_MODULE, | ||
| 75 | .of_match_table = gsbi_dt_match, | ||
| 76 | }, | ||
| 77 | .probe = gsbi_probe, | ||
| 78 | }; | ||
| 79 | |||
| 80 | module_platform_driver(gsbi_driver); | ||
| 81 | |||
| 82 | MODULE_AUTHOR("Andy Gross <agross@codeaurora.org>"); | ||
| 83 | MODULE_DESCRIPTION("QCOM GSBI driver"); | ||
| 84 | MODULE_LICENSE("GPL v2"); | ||
