lkml.org 
[lkml]   [2020]   [Apr]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCHv6 0/4] n_gsm serdev support and protocol driver for droid4 modem
    Hi!

    > > > > Here's v4 set of n_gsm serdev support patches, and the related protocol
    > > > > driver for the modem found on Motorola Mapphone phones and tablets
    > > > > like droid4.
    > > > >
    > > > > This series only adds basic character device support for the serdev
    > > > > driver. Other serdev consumer drivers for specific devices will be
    > > > > posted separately.
    > > >
    > > > I'm still missing an architectural (design) overview here -- reviewer
    > > > time is a scarce resource.
    > > >
    > > > I also suggested earlier that you include, at least as an RFC, one or
    > > > more of your child-device drivers so that we can see how this ends up
    > > > being used in the end (including an example devicetree).
    > >
    > > Note that this is useful on its own: we have ofonod running on the top
    > > of this doing calls and SMSes.
    >
    > Yup.
    >
    > > Tony: I know you have drivers depending on this somewhere (audio
    > > routing and GPS), but I can't find them. It is not droid4-pending-v5.6
    > > AFAICT. Do you have a pointer / could you publish them somewhere?
    >
    > Hmm they should be there in droid4-pending-v5.6 branch [0]:
    >
    > $ git log --abbrev=12 --pretty=format:"%h (\"%s\")" \
    > v5.6..droid4-pending-v5.6 | grep -i -e gsm -e mot -e mdm
    > e09590a260a4 ("mfd: motmdm: Fix oops on unload of motorola-mdm")
    > f9252f9ff6bd ("mfd: motmdm: Revert bad list change")
    > d733dcaf4416 ("mfd: motmdm: Fix issue with receiving data before ddata is set")
    > 452d2b5d4c95 ("n_gsm: Build fixes for make randconfig build")
    > 6882b27ea92a ("phy: mapphone-mdm6600: Fix write timeouts with shorter GPIO toggle interval")
    > 58ff58c4b520 ("mfd: motmdm: Add basic DTMF support")
    > e92b6f30e5ae ("ASoC: audio-graph-card: Add audio mixer for motorold mdm6600")
    > c2caea5767d5 ("gnss: mot-mdm6600: Add support for Motorola Mapphone MDM6600 modem")
    > a5f73b7b06f6 ("mfd: motmdm: Add Motorola TS 27.010 serdev driver for devices like droid4")
    > 6c311d5aeb0a ("dt-bindings: mfd: motmdm: Add binding for motorola-mdm")
    > cd02274b920e ("tty: n_gsm: Add support for serdev drivers")
    > a73a48321c98 ("phy: mapphone-mdm6600: Fix timeouts by adding wake-up handling")

    Thanks for pointers, I was lost in all the git trees. Port is not
    quite trivial :-(.

    I tried to port GPS and codec support over to new version of base
    patches, but I get oops when I try to open the GPS:

    Best regards,
    Pavel

    [ 182.877014] bfe0: 00000005 bed23af8 b6f279cf b6eb46f6 00070030
    bed23ea7 00000000 00000000
    [ 182.901672] [<c06e7ba8>] (motmdm_gnss_open) from [<c06e71d4>]
    (gnss_open+0x7c/0xb0)
    [ 182.901672] [<c06e71d4>] (gnss_open) from [<c0221fe0>]
    (chrdev_open+0x9c/0x194)
    [ 182.901672] [<c0221fe0>] (chrdev_open) from [<c0219524>]
    (do_dentry_open+0x21c/0x3e8)
    [ 182.901672] [<c0219524>] (do_dentry_open) from [<c022b424>]
    (path_openat+0x8b0/0xc1c)
    [ 182.901672] [<c022b424>] (path_openat) from [<c022d0ac>]
    (do_filp_open+0x60/0xb4)
    [ 182.940002] [<c022d0ac>] (do_filp_open) from [<c0219958>]
    (do_sys_openat2+0x1f0/0x2f4)
    [ 182.940002] [<c0219958>] (do_sys_openat2) from [<c021ada8>]
    (do_sys_open+0x98:

    diff --git a/drivers/gnss/Kconfig b/drivers/gnss/Kconfig
    index 960178dfad47..13b91034e3ea 100644
    --- a/drivers/gnss/Kconfig
    +++ b/drivers/gnss/Kconfig
    @@ -15,7 +15,6 @@ if GNSS

    config GNSS_MOTMDM
    tristate "Motorola Modem TS 27.010 serdev GNSS receiver support"
    - depends on MFD_MOTMDM
    ---help---
    Say Y here if you have a Motorola modem using TS 27.010 line
    discipline for GNSS such as a Motorola Mapphone series device
    diff --git a/drivers/tty/serdev/protocol/serdev-ngsm-motmdm.c b/drivers/tty/serdev/protocol/serdev-ngsm-motmdm.c
    index 97eb349f5f13..f234a0cd2fb7 100644
    --- a/drivers/tty/serdev/protocol/serdev-ngsm-motmdm.c
    +++ b/drivers/tty/serdev/protocol/serdev-ngsm-motmdm.c
    @@ -477,7 +477,7 @@ static int motmdm_send_command(struct device *dev,
    return err;
    }

    -static int motmdm_register_dlci(struct device *dev,
    +int motmdm_register_dlci(struct device *dev,
    struct motmdm_dlci *mot_dlci)
    {
    struct motmdm *ddata;
    @@ -522,7 +522,7 @@ static int motmdm_register_dlci(struct device *dev,
    return err;
    }

    -static void motmdm_unregister_dlci(struct device *dev,
    +void motmdm_unregister_dlci(struct device *dev,
    struct motmdm_dlci *mot_dlci)
    {
    struct motmdm *ddata;
    diff --git a/include/linux/mfd/motorola-mdm.h b/include/linux/mfd/motorola-mdm.h
    new file mode 100644
    index 000000000000..aae61050cd34
    --- /dev/null
    +++ b/include/linux/mfd/motorola-mdm.h
    @@ -0,0 +1,84 @@
    +/* SPDX-License-Identifier: GPL-2.0 */
    +
    +struct gsm_serdev_dlci;
    +struct kfifo;
    +struct motmdm_response;
    +
    +enum motmdm_dlci_nr {
    + MOTMDM_DLCI1 = 1,
    + MOTMDM_DLCI2,
    + MOTMDM_DLCI3,
    + MOTMDM_DLCI4,
    + MOTMDM_DLCI5,
    + MOTMDM_DLCI6,
    + MOTMDM_DLCI7,
    + MOTMDM_DLCI8,
    + MOTMDM_DLCI9,
    + MOTMDM_DLCI10,
    + MOTMDM_DLCI11,
    + MOTMDM_DLCI12,
    + MOTMDM_DLCI13,
    + MOTMDM_DLCI14,
    + MOTMDM_DLCI15,
    +};
    +
    +enum motmdm_state {
    + MOTMDM_STATE_IDLE = 0,
    + MOTMDM_STATE_DIAL = 1,
    + MOTMDM_STATE_ANSWERING = 2,
    + MOTMDM_STATE_CONNECTING = 3,
    + MOTMDM_STATE_INCOMING = 4,
    + MOTMDM_STATE_CONNECTED = 5,
    + MOTMDM_STATE_HANGING_UP = 6,
    + MOTMDM_STATE_DISCONNECTED = 7,
    +};
    +
    +struct motmdm_dlci {
    + struct gsm_serdev_dlci gsm_dlci;
    + struct list_head node;
    + wait_queue_head_t read_queue;
    + struct kfifo read_fifo;
    + int line;
    + u16 id;
    + int (*send_command)(struct device *dev, struct motmdm_dlci *mot_dlci,
    + unsigned long timeout_ms, const unsigned char *cmd,
    + size_t cmdlen,
    + unsigned char *rsp, size_t rsplen);
    + int (*handle_command)(struct motmdm_dlci *mot_dlci, int id,
    + const unsigned char *buf, size_t len);
    + int (*receive_data)(struct motmdm_dlci *mot_dlci,
    + const unsigned char *buf,
    + size_t len);
    + int (*write)(struct device *dev, struct motmdm_dlci *mot_dlci,
    + int cmdid, const unsigned char *buf, size_t count);
    + int (*notify)(struct motmdm_dlci *mot_dlci, enum motmdm_state);
    + struct list_head list;
    + void *privdata; /* Do not use, internal data */
    + void *drvdata; /* Available for consumer drivers */
    +};
    +
    +int motmdm_register_dlci(struct device *dev, struct motmdm_dlci *mot_dlci);
    +void motmdm_unregister_dlci(struct device *dev, struct motmdm_dlci *mot_dlci);
    +
    +static inline
    +int motmdm_send_command(struct device *dev, struct motmdm_dlci *mot_dlci,
    + unsigned long timeout_ms, const unsigned char *cmd,
    + size_t cmdlen, unsigned char *rsp, size_t rsplen)
    +{
    + if (mot_dlci && mot_dlci->send_command)
    + return mot_dlci->send_command(dev, mot_dlci,
    + timeout_ms, cmd, cmdlen,
    + rsp, rsplen);
    + else
    + return -EINVAL;
    +}
    +
    +static inline
    +int motmdm_write(struct device *dev, struct motmdm_dlci *mot_dlci,
    + const unsigned char *buf, size_t count)
    +{
    + if (mot_dlci && mot_dlci->write)
    + return mot_dlci->write(dev, mot_dlci, -1, buf, count);
    + else
    + return -EINVAL;
    +}
    diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
    index 3635fc0ab2a6..63d8d3e731ff 100644
    --- a/sound/soc/codecs/Kconfig
    +++ b/sound/soc/codecs/Kconfig
    @@ -878,7 +878,6 @@ config SND_SOC_MAX9860

    config SND_SOC_MOTMDM
    tristate "Motorola Modem TS 27.010 Voice Call Codec"
    - depends on MFD_MOTMDM
    help
    Enable support for Motorola TS 27.010 line discipline serdev
    voice call codec driver for Motorola Mapphone series of devices
    --
    DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
    HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2020-04-26 09:27    [W:3.248 / U:0.420 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site