aboutsummaryrefslogtreecommitdiffstats
path: root/testing/ofono/0001-nokia-gpio-do-not-create-links-to-gpios-in-dev-cmt.patch
diff options
context:
space:
mode:
Diffstat (limited to 'testing/ofono/0001-nokia-gpio-do-not-create-links-to-gpios-in-dev-cmt.patch')
-rw-r--r--testing/ofono/0001-nokia-gpio-do-not-create-links-to-gpios-in-dev-cmt.patch104
1 files changed, 104 insertions, 0 deletions
diff --git a/testing/ofono/0001-nokia-gpio-do-not-create-links-to-gpios-in-dev-cmt.patch b/testing/ofono/0001-nokia-gpio-do-not-create-links-to-gpios-in-dev-cmt.patch
new file mode 100644
index 0000000000..83c1b64caa
--- /dev/null
+++ b/testing/ofono/0001-nokia-gpio-do-not-create-links-to-gpios-in-dev-cmt.patch
@@ -0,0 +1,104 @@
+From 20642bfed99dac5559f88743c3043f33fa3e7796 Mon Sep 17 00:00:00 2001
+From: Clayton Craft <clayton@craftyguy.net>
+Date: Tue, 26 Sep 2017 19:42:11 -0700
+Subject: [PATCH] nokia-gpio: do not create links to gpios in /dev/cmt
+
+The nokia-gpio plugin should not try to create symlinks to relevant gpio
+pins under /dev/cmt, since the location it is looking is no longer
+correct on newer kernels and it might change again in the future. This
+patch removes code from nokia-gpio that tries to create a symlink.
+
+Users will now need to symlink the modem gpios to /dev/cmt themselves.
+On the 4.13 kernel, this can be done by, for example, adding a udev rule
+to:
+ # ln -sf /sys/bus/hsi/devices/n900-modem /dev/cmt
+---
+ plugins/nokia-gpio.c | 67 ++++------------------------------------------------
+ 1 file changed, 4 insertions(+), 63 deletions(-)
+
+diff --git a/plugins/nokia-gpio.c b/plugins/nokia-gpio.c
+index 7a93106c..1d014337 100644
+--- a/plugins/nokia-gpio.c
++++ b/plugins/nokia-gpio.c
+@@ -632,74 +632,15 @@ static void phonet_status_cb(GIsiModem *idx, enum GIsiPhonetLinkState state,
+
+ static int gpio_probe_links(void)
+ {
+- char const *gpiodir = "/sys/class/gpio";
+ char const *cmtdir = "/dev/cmt";
+- DIR *gpio;
+- struct dirent *d;
+
+- if (file_exists(cmtdir)) {
+- DBG("Using %s", cmtdir);
+- return 0;
+- }
+-
+- DBG("Using %s: trying to make links to %s", gpiodir, cmtdir);
+-
+- if (!dir_exists(cmtdir)) {
+- if (mkdir(cmtdir, 0755) == -1) {
+- DBG("%s: %s", cmtdir, strerror(errno));
+- return -(errno = ENODEV);
+- }
+- }
+-
+- gpio = opendir(gpiodir);
+- if (gpio == NULL) {
+- DBG("%s: %s", "gpiodir", strerror(errno));
++ if (!file_exists(cmtdir)) {
++ DBG("%s: %s", cmtdir, strerror(errno));
+ return -(errno = ENODEV);
+ }
+
+- while ((d = readdir(gpio)) != NULL) {
+- char nn[PATH_MAX], name[PATH_MAX], from[PATH_MAX], to[PATH_MAX];
+- FILE *nf;
+- size_t len;
+-
+- snprintf(nn, sizeof nn, "%s/%s/name", gpiodir, d->d_name);
+-
+- nf = fopen(nn, "rb");
+- if (nf == NULL) {
+- DBG("%s: %s", nn, strerror(errno));
+- continue;
+- }
+-
+- len = fread(name, sizeof name, 1, nf);
+-
+- if (ferror(nf)) {
+- DBG("read from %s: %s", nn, strerror(errno));
+- fclose(nf);
+- continue;
+- }
+-
+- fclose(nf);
+-
+- if (len < 4)
+- continue;
+-
+- name[--len] = '\0';
+-
+- if (strncmp(name, "cmt_", 4))
+- continue;
+-
+- snprintf(from, sizeof from, "%s/%s", gpiodir, d->d_name);
+- snprintf(to, sizeof to, "%s/%s", cmtdir, name);
+-
+- if (symlink(from, to) == -1)
+- DBG("%s: %s", to, strerror(errno));
+- }
+-
+- DBG("%s: %s", "/sys/class/gpio", strerror(errno));
+-
+- (void) closedir(gpio);
+-
+- return -(errno = ENODEV);
++ DBG("Using %s", cmtdir);
++ return 0;
+ }
+
+
+--
+2.14.1
+