root/drivers/usb/serial/empeg.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. empeg_startup
  2. empeg_init_termios

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * USB Empeg empeg-car player driver
   4  *
   5  *      Copyright (C) 2000, 2001
   6  *          Gary Brubaker (xavyer@ix.netcom.com)
   7  *
   8  *      Copyright (C) 1999 - 2001
   9  *          Greg Kroah-Hartman (greg@kroah.com)
  10  *
  11  * See Documentation/usb/usb-serial.rst for more information on using this
  12  * driver
  13  */
  14 
  15 #include <linux/kernel.h>
  16 #include <linux/errno.h>
  17 #include <linux/slab.h>
  18 #include <linux/tty.h>
  19 #include <linux/tty_driver.h>
  20 #include <linux/tty_flip.h>
  21 #include <linux/module.h>
  22 #include <linux/spinlock.h>
  23 #include <linux/uaccess.h>
  24 #include <linux/usb.h>
  25 #include <linux/usb/serial.h>
  26 
  27 #define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>, Gary Brubaker <xavyer@ix.netcom.com>"
  28 #define DRIVER_DESC "USB Empeg Mark I/II Driver"
  29 
  30 #define EMPEG_VENDOR_ID                 0x084f
  31 #define EMPEG_PRODUCT_ID                0x0001
  32 
  33 /* function prototypes for an empeg-car player */
  34 static int  empeg_startup(struct usb_serial *serial);
  35 static void empeg_init_termios(struct tty_struct *tty);
  36 
  37 static const struct usb_device_id id_table[] = {
  38         { USB_DEVICE(EMPEG_VENDOR_ID, EMPEG_PRODUCT_ID) },
  39         { }                                     /* Terminating entry */
  40 };
  41 
  42 MODULE_DEVICE_TABLE(usb, id_table);
  43 
  44 static struct usb_serial_driver empeg_device = {
  45         .driver = {
  46                 .owner =        THIS_MODULE,
  47                 .name =         "empeg",
  48         },
  49         .id_table =             id_table,
  50         .num_ports =            1,
  51         .bulk_out_size =        256,
  52         .throttle =             usb_serial_generic_throttle,
  53         .unthrottle =           usb_serial_generic_unthrottle,
  54         .attach =               empeg_startup,
  55         .init_termios =         empeg_init_termios,
  56 };
  57 
  58 static struct usb_serial_driver * const serial_drivers[] = {
  59         &empeg_device, NULL
  60 };
  61 
  62 static int empeg_startup(struct usb_serial *serial)
  63 {
  64         int r;
  65 
  66         if (serial->dev->actconfig->desc.bConfigurationValue != 1) {
  67                 dev_err(&serial->dev->dev, "active config #%d != 1 ??\n",
  68                         serial->dev->actconfig->desc.bConfigurationValue);
  69                 return -ENODEV;
  70         }
  71 
  72         r = usb_reset_configuration(serial->dev);
  73 
  74         /* continue on with initialization */
  75         return r;
  76 }
  77 
  78 static void empeg_init_termios(struct tty_struct *tty)
  79 {
  80         struct ktermios *termios = &tty->termios;
  81 
  82         /*
  83          * The empeg-car player wants these particular tty settings.
  84          * You could, for example, change the baud rate, however the
  85          * player only supports 115200 (currently), so there is really
  86          * no point in support for changes to the tty settings.
  87          * (at least for now)
  88          *
  89          * The default requirements for this device are:
  90          */
  91         termios->c_iflag
  92                 &= ~(IGNBRK     /* disable ignore break */
  93                 | BRKINT        /* disable break causes interrupt */
  94                 | PARMRK        /* disable mark parity errors */
  95                 | ISTRIP        /* disable clear high bit of input characters */
  96                 | INLCR         /* disable translate NL to CR */
  97                 | IGNCR         /* disable ignore CR */
  98                 | ICRNL         /* disable translate CR to NL */
  99                 | IXON);        /* disable enable XON/XOFF flow control */
 100 
 101         termios->c_oflag
 102                 &= ~OPOST;      /* disable postprocess output characters */
 103 
 104         termios->c_lflag
 105                 &= ~(ECHO       /* disable echo input characters */
 106                 | ECHONL        /* disable echo new line */
 107                 | ICANON        /* disable erase, kill, werase, and rprnt special characters */
 108                 | ISIG          /* disable interrupt, quit, and suspend special characters */
 109                 | IEXTEN);      /* disable non-POSIX special characters */
 110 
 111         termios->c_cflag
 112                 &= ~(CSIZE      /* no size */
 113                 | PARENB        /* disable parity bit */
 114                 | CBAUD);       /* clear current baud rate */
 115 
 116         termios->c_cflag
 117                 |= CS8;         /* character size 8 bits */
 118 
 119         tty_encode_baud_rate(tty, 115200, 115200);
 120 }
 121 
 122 module_usb_serial_driver(serial_drivers, id_table);
 123 
 124 MODULE_AUTHOR(DRIVER_AUTHOR);
 125 MODULE_DESCRIPTION(DRIVER_DESC);
 126 MODULE_LICENSE("GPL v2");

/* [<][>][^][v][top][bottom][index][help] */