Hi Martin,

I previously submitted pacthes[1] for the Quectel M95 modem, and now finally have the time needed to address the review comments.

In the meantime, my hardware has changed (modem chip remains the same though), and so I would like to add more generic power management the ofono driver.

I would assume that I cannot be the first with the urge to control modem power using GPIOs (found one example in ofono/plugins/nokia-gpio.c), so

Maybe not the first, but nobody has brought this up for oh ~8 years or so. So might as well treat yourself as the first ;)

I see.. Maybe I will not be the last then :)

You are certainly not the last. I have a Beaglebone-derived device with a slightly wobbly Quectel UC20 connected to a slightly wobbly USB host controller. As a preventative measure I plan to toggle reset of both the USB controller and GSM module before a dial-up session is (re)started.

it might make sense to add GPIO helper in a common object, and use libgpiod in there?

We will not be adding any further dependencies on GLib based libraries for oFono as GLib use is going to be deprecated over time (in favor of ell). This is especially true for a small library like libgpiod.

I don't think libgpiod i GLib based:

ldd /usr/lib/libgpiod.so
         linux-vdso.so.1 (0x00007ffe90977000)
         libc.so.6 => /usr/lib/libc.so.6 (0x00007f325b3d4000)
         /usr/lib64/ld-linux-x86-64.so.2 (0x00007f325b5b4000)

So this has to be done either inside oFono itself or preferably as a set of class(es) inside ell.

As long as it is only a matter of setting a single GPIO on/off, then I think a helper in common/gpio.{c,h} should be enough - something like this from my little test program:

static bool gpio_set(uint32_t chip, uint32_t line, uint8_t value)
{
         struct gpiohandle_request req = {0};
         char path[] = "/dev/gpiochipXX";
         int ret, fd;

         snprintf(path, sizeof(path), "/dev/gpiochip%u", chip);
         fd = open(path, O_RDWR | O_CLOEXEC);
         if (fd < 0) {
                 error(0, errno, "open: %s", path);
                 return false;
         }

         req.lineoffsets[0] = line;
         req.lines = 1;
         req.flags = GPIOHANDLE_REQUEST_OUTPUT;
         req.default_values[0] = !!value;
         strncpy(req.consumer_label, "ofono", sizeof(req.consumer_label));

         ret = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req);
         if (ret < 0) {
                 error(0, errno, "ioctl");
                 return false;
         }

         return true;
}

Do I assume correctly that this is a work in progress? I'm going to hack out a prototype to test the wobbliness countermeasures, but I'd like to have a rough idea of how temporary my hack would end up being.

If that would be acceptable, a way to configure such GPIO numbers/names is needed. Should this be done with an OFONO_CONFIG env attribute in the udev rules?

That is ultimately up to the driver. Serial devices have to rely on udev rules or configuration files, so either should be fine.

udev rules it is then
Are the Ofono udev rules documented anywhere? I can see two .rules files in the plugins directory, but they're a bit cryptic.

--
Kind regards,
Tarmo
_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono

Reply via email to