diff options
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.patch | 104 |
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 + |