Re: [PATCHv6 0/4] n_gsm serdev support and protocol driver for droid4 modem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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")

Here's better try at getting gnss to work on top of linux-next... but
still no luck.

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/gnss/motmdm.c b/drivers/gnss/motmdm.c
index 5ec2fa25df6f..426e9da6bb12 100644
--- a/drivers/gnss/motmdm.c
+++ b/drivers/gnss/motmdm.c
@@ -21,6 +21,8 @@
 
 #include <linux/mfd/motorola-mdm.h>
 
+#define DEBUG
+
 #define MOTMDM_GNSS_TIMEOUT	1000
 #define MOTMDM_GNSS_RATE	1000
 
@@ -197,6 +199,8 @@ static int motmdm_gnss_receive_data(struct motmdm_dlci *mot_dlci,
 	if (len <= MOTMDM_GNSS_MPD_LEN)
 		return 0;
 
+	printk("gnss: Have %d bytes of data\n", len);
+
 	switch (buf[MOTMDM_GNSS_MPD_LEN]) {
 	case 'N':	/* UNNNN~+MPDNMEA=NN, */
 		msg = buf + MOTMDM_GNSS_NMEA_LEN;
diff --git a/drivers/tty/serdev/protocol/serdev-ngsm-motmdm.c b/drivers/tty/serdev/protocol/serdev-ngsm-motmdm.c
index 97eb349f5f13..15353e228b18 100644
--- a/drivers/tty/serdev/protocol/serdev-ngsm-motmdm.c
+++ b/drivers/tty/serdev/protocol/serdev-ngsm-motmdm.c
@@ -4,6 +4,7 @@
  * Copyright (C) 2018 - 2020 Tony Lindgren <tony@xxxxxxxxxxx>
  */
 
+#define DEBUG
 #include <linux/cdev.h>
 #include <linux/delay.h>
 #include <linux/device.h>
@@ -26,6 +27,8 @@
 #include <linux/mfd/core.h>
 #include <linux/phy/phy.h>
 
+#include <linux/mfd/motorola-mdm.h>
+
 #include <uapi/linux/gsmmux.h>
 
 #define MOTMDM_C_N2		3	/* TS27.010 default value */
@@ -67,36 +70,6 @@ struct motmdm_response {
 	unsigned int handled:1;
 };
 
-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,
-};
-
-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;
-	struct list_head list;
-	void *privdata;		/* Do not use, internal data */
-	void *drvdata;		/* Available for consumer drivers */
-};
-
 struct motmdm_cdev {
 	struct motmdm *ddata;
 	struct list_head node;
@@ -283,6 +256,10 @@ static int motmdm_dlci_handle_command(struct motmdm_dlci *mot_dlci, int id,
 			break;
 	}
 
+	if (mot_dlci->receive_data) {
+		return (*mot_dlci->receive_data)(mot_dlci, buf, len);
+	}
+
 	if (!resp || !resp->buf)
 		return -ENODEV;
 
@@ -415,7 +392,7 @@ static int motmdm_write(struct device *dev, struct motmdm_dlci *mot_dlci,
  * Helper for child device drivers to send a command to a DLCI and wait
  * for result with a matching packet ID.
  */
-static int motmdm_send_command(struct device *dev,
+int motmdm_send_command(struct device *dev,
 			       struct motmdm_dlci *mot_dlci,
 			       unsigned long timeout_ms,
 			       const unsigned char *cmd, size_t cmdlen,
@@ -477,7 +454,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 +499,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..70c52304ffff
--- /dev/null
+++ b/include/linux/mfd/motorola-mdm.h
@@ -0,0 +1,59 @@
+/* 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;
+	struct list_head list;
+	void *privdata;		/* Do not use, internal data */
+	void *drvdata;		/* Available for consumer drivers */
+	
+	int (*receive_data)(struct motmdm_dlci *mot_dlci,
+			    const unsigned char *buf,
+			    size_t len);
+};
+
+int motmdm_register_dlci(struct device *dev, struct motmdm_dlci *mot_dlci);
+void motmdm_unregister_dlci(struct device *dev, struct motmdm_dlci *mot_dlci);
+
+extern 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);
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

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux