Hi! > We can make use of serdev drivers to do simple device drivers for > TS 27.010 chanels, and we can handle vendor specific protocols on top > of TS 27.010 with serdev drivers. > > So far this has been tested with Motorola droid4 where there is a custom > packet numbering protocol on top of TS 27.010 for the MDM6600 modem. > > I initially though about adding the serdev support into a separate file, > but that will take some refactoring of n_gsm.c. And I'd like to have > things working first. Then later on we might want to consider splitting > n_gsm.c into three pieces for core, tty and serdev parts. And then maybe > the serdev related parts can be just moved to live under something like > drivers/tty/serdev/protocol/ngsm.c. > > Signed-off-by: Tony Lindgren If you fix error path below, you can add: Reviewed-by: Pavel Machek > +static struct gsm_dlci *gsd_dlci_get(struct gsm_serdev *gsd, int line, > + bool allocate) > +{ > + struct gsm_mux *gsm; > + struct gsm_dlci *dlci; > + > + if (!gsd || !gsd->gsm) > + return ERR_PTR(-ENODEV); > + > + gsm = gsd->gsm; > + > + if (line < 1 || line >= 63) > + return ERR_PTR(-EINVAL); > + > + mutex_lock(&gsm->mutex); ... > + dlci = gsm_dlci_alloc(gsm, line); > + if (!dlci) { > + gsm = ERR_PTR(-ENOMEM); > + goto unlock; dlci = , or you get nice crash. Best regards, Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html