|
|
@@ -1,97 +0,0 @@
|
|
|
---- a/drivers/misc/Makefile
|
|
|
-+++ b/drivers/misc/Makefile
|
|
|
-@@ -52,6 +52,7 @@ obj-$(CONFIG_ECHO) += echo/
|
|
|
- obj-$(CONFIG_CXL_BASE) += cxl/
|
|
|
- obj-$(CONFIG_DW_XDATA_PCIE) += dw-xdata-pcie.o
|
|
|
- obj-$(CONFIG_PCI_ENDPOINT_TEST) += pci_endpoint_test.o
|
|
|
-+obj-$(CONFIG_SOC_MT7620) += linkit.o
|
|
|
- obj-$(CONFIG_OCXL) += ocxl/
|
|
|
- obj-$(CONFIG_BCM_VK) += bcm-vk/
|
|
|
- obj-y += cardreader/
|
|
|
---- /dev/null
|
|
|
-+++ b/drivers/misc/linkit.c
|
|
|
-@@ -0,0 +1,84 @@
|
|
|
-+/*
|
|
|
-+ * This program is free software; you can redistribute it and/or modify
|
|
|
-+ * it under the terms of the GNU General Public License version 2 as
|
|
|
-+ * publishhed by the Free Software Foundation.
|
|
|
-+ *
|
|
|
-+ * Copyright (C) 2015 John Crispin <[email protected]>
|
|
|
-+ */
|
|
|
-+
|
|
|
-+#include <linux/module.h>
|
|
|
-+#include <linux/platform_device.h>
|
|
|
-+#include <linux/of.h>
|
|
|
-+#include <linux/mtd/mtd.h>
|
|
|
-+#include <linux/gpio.h>
|
|
|
-+
|
|
|
-+#define LINKIT_LATCH_GPIO 11
|
|
|
-+
|
|
|
-+struct linkit_hw_data {
|
|
|
-+ char board[16];
|
|
|
-+ char rev[16];
|
|
|
-+};
|
|
|
-+
|
|
|
-+static void sanify_string(char *s)
|
|
|
-+{
|
|
|
-+ int i;
|
|
|
-+
|
|
|
-+ for (i = 0; i < 15; i++)
|
|
|
-+ if (s[i] <= 0x20)
|
|
|
-+ s[i] = '\0';
|
|
|
-+ s[15] = '\0';
|
|
|
-+}
|
|
|
-+
|
|
|
-+static int linkit_probe(struct platform_device *pdev)
|
|
|
-+{
|
|
|
-+ struct linkit_hw_data hw;
|
|
|
-+ struct mtd_info *mtd;
|
|
|
-+ size_t retlen;
|
|
|
-+ int ret;
|
|
|
-+
|
|
|
-+ mtd = get_mtd_device_nm("factory");
|
|
|
-+ if (IS_ERR(mtd))
|
|
|
-+ return PTR_ERR(mtd);
|
|
|
-+
|
|
|
-+ ret = mtd_read(mtd, 0x400, sizeof(hw), &retlen, (u_char *) &hw);
|
|
|
-+ put_mtd_device(mtd);
|
|
|
-+
|
|
|
-+ sanify_string(hw.board);
|
|
|
-+ sanify_string(hw.rev);
|
|
|
-+
|
|
|
-+ dev_info(&pdev->dev, "Version : %s\n", hw.board);
|
|
|
-+ dev_info(&pdev->dev, "Revision : %s\n", hw.rev);
|
|
|
-+
|
|
|
-+ if (!strcmp(hw.board, "LINKITS7688")) {
|
|
|
-+ dev_info(&pdev->dev, "setting up bootstrap latch\n");
|
|
|
-+
|
|
|
-+ if (devm_gpio_request(&pdev->dev, LINKIT_LATCH_GPIO, "bootstrap")) {
|
|
|
-+ dev_err(&pdev->dev, "failed to setup bootstrap gpio\n");
|
|
|
-+ return -1;
|
|
|
-+ }
|
|
|
-+ gpio_direction_output(LINKIT_LATCH_GPIO, 0);
|
|
|
-+ }
|
|
|
-+
|
|
|
-+ return 0;
|
|
|
-+}
|
|
|
-+
|
|
|
-+static const struct of_device_id linkit_match[] = {
|
|
|
-+ { .compatible = "mediatek,linkit" },
|
|
|
-+ {},
|
|
|
-+};
|
|
|
-+MODULE_DEVICE_TABLE(of, linkit_match);
|
|
|
-+
|
|
|
-+static struct platform_driver linkit_driver = {
|
|
|
-+ .probe = linkit_probe,
|
|
|
-+ .driver = {
|
|
|
-+ .name = "mtk-linkit",
|
|
|
-+ .owner = THIS_MODULE,
|
|
|
-+ .of_match_table = linkit_match,
|
|
|
-+ },
|
|
|
-+};
|
|
|
-+
|
|
|
-+int __init linkit_init(void)
|
|
|
-+{
|
|
|
-+ return platform_driver_register(&linkit_driver);
|
|
|
-+}
|
|
|
-+late_initcall_sync(linkit_init);
|