From 20642bfed99dac5559f88743c3043f33fa3e7796 Mon Sep 17 00:00:00 2001 From: Clayton Craft 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