Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6: USB: drivers/usb/serial/bus.c: Fix incompatible pointer type warning USB: another quirky device (LCD display) USB: fix serial gadget ACM breakage USB: More USB_QUIRK_RESET_RESUME devices USB Mass Storage: limit "Rockchip ROCK MP3" device (071b:3203) max I/O to 64 sectors per command USB: Nikon D40 Quirks USB: Add Sony Ericsson P1i to unusual_devs.h USB: option: Add Dell HSDPA 5520 to driver USB: option: Add a new device ID for the HUAWEI E220 HSDPA modem. USB: fix linked list insertion bugfix for usb core USB: quirky flash drive USB: prevent Genesys USB-IDE from autosuspending USB: prevent Thomson card reader from autosuspending USB: Add iPhone device id to the quirk list. USB: ftdi_sio: add of a new product/manufacturer, TML usb/misc/sisusbvga: add product ID of TARGUS/MCT device USB: oti6858: Remove broken ioctl code in -mm tree and also the broken fixes
This commit is contained in:
@@ -60,7 +60,7 @@ ssize_t usb_store_new_id(struct usb_dynids *dynids,
|
|||||||
dynid->id.match_flags = USB_DEVICE_ID_MATCH_DEVICE;
|
dynid->id.match_flags = USB_DEVICE_ID_MATCH_DEVICE;
|
||||||
|
|
||||||
spin_lock(&dynids->lock);
|
spin_lock(&dynids->lock);
|
||||||
list_add_tail(&dynids->list, &dynid->node);
|
list_add_tail(&dynid->node, &dynids->list);
|
||||||
spin_unlock(&dynids->lock);
|
spin_unlock(&dynids->lock);
|
||||||
|
|
||||||
if (get_driver(driver)) {
|
if (get_driver(driver)) {
|
||||||
|
@@ -28,10 +28,16 @@
|
|||||||
* devices is broken...
|
* devices is broken...
|
||||||
*/
|
*/
|
||||||
static const struct usb_device_id usb_quirk_list[] = {
|
static const struct usb_device_id usb_quirk_list[] = {
|
||||||
|
/* CBM - Flash disk */
|
||||||
|
{ USB_DEVICE(0x0204, 0x6025), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
/* HP 5300/5370C scanner */
|
/* HP 5300/5370C scanner */
|
||||||
{ USB_DEVICE(0x03f0, 0x0701), .driver_info = USB_QUIRK_STRING_FETCH_255 },
|
{ USB_DEVICE(0x03f0, 0x0701), .driver_info = USB_QUIRK_STRING_FETCH_255 },
|
||||||
/* Hewlett-Packard PhotoSmart 720 / PhotoSmart 935 (storage) */
|
/* Hewlett-Packard PhotoSmart 720 / PhotoSmart 935 (storage) */
|
||||||
{ USB_DEVICE(0x03f0, 0x4002), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
{ USB_DEVICE(0x03f0, 0x4002), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
||||||
|
|
||||||
|
/* SGS Thomson Microelectronics 4in1 card reader */
|
||||||
|
{ USB_DEVICE(0x0483, 0x0321), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
||||||
|
|
||||||
/* Acer Peripherals Inc. (now BenQ Corp.) Prisa 640BU */
|
/* Acer Peripherals Inc. (now BenQ Corp.) Prisa 640BU */
|
||||||
{ USB_DEVICE(0x04a5, 0x207e), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
{ USB_DEVICE(0x04a5, 0x207e), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
||||||
/* Benq S2W 3300U */
|
/* Benq S2W 3300U */
|
||||||
@@ -66,6 +72,19 @@ static const struct usb_device_id usb_quirk_list[] = {
|
|||||||
{ USB_DEVICE(0x05cc, 0x2267), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
{ USB_DEVICE(0x05cc, 0x2267), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
||||||
/* Ultima Electronics Corp.*/
|
/* Ultima Electronics Corp.*/
|
||||||
{ USB_DEVICE(0x05d8, 0x4005), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
{ USB_DEVICE(0x05d8, 0x4005), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
||||||
|
|
||||||
|
/* Genesys USB-to-IDE */
|
||||||
|
{ USB_DEVICE(0x0503, 0x0702), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
||||||
|
|
||||||
|
/* USB Graphical LCD - EEH Datalink GmbH */
|
||||||
|
{ USB_DEVICE(0x060c, 0x04eb), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
||||||
|
|
||||||
|
/* INTEL VALUE SSD */
|
||||||
|
{ USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
|
||||||
|
/* M-Systems Flash Disk Pioneers */
|
||||||
|
{ USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
|
||||||
/* Agfa Snapscan1212u */
|
/* Agfa Snapscan1212u */
|
||||||
{ USB_DEVICE(0x06bd, 0x2061), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
{ USB_DEVICE(0x06bd, 0x2061), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
||||||
/* Seagate RSS LLC */
|
/* Seagate RSS LLC */
|
||||||
@@ -87,6 +106,12 @@ static const struct usb_device_id usb_quirk_list[] = {
|
|||||||
{ USB_DEVICE(0x0fca, 0x0004), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
{ USB_DEVICE(0x0fca, 0x0004), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
||||||
{ USB_DEVICE(0x0fca, 0x0006), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
{ USB_DEVICE(0x0fca, 0x0006), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
||||||
|
|
||||||
|
/* Apple iPhone */
|
||||||
|
{ USB_DEVICE(0x05ac, 0x1290), .driver_info = USB_QUIRK_NO_AUTOSUSPEND },
|
||||||
|
|
||||||
|
/* SKYMEDI USB_DRIVE */
|
||||||
|
{ USB_DEVICE(0x1516, 0x8628), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
|
||||||
{ } /* terminating entry must be last */
|
{ } /* terminating entry must be last */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1691,14 +1691,12 @@ static int gs_setup_class(struct usb_gadget *gadget,
|
|||||||
|
|
||||||
switch (ctrl->bRequest) {
|
switch (ctrl->bRequest) {
|
||||||
case USB_CDC_REQ_SET_LINE_CODING:
|
case USB_CDC_REQ_SET_LINE_CODING:
|
||||||
ret = min(wLength,
|
/* FIXME Submit req to read the data; have its completion
|
||||||
(u16)sizeof(struct usb_cdc_line_coding));
|
* handler copy that data to port->port_line_coding (iff
|
||||||
if (port) {
|
* it's valid) and maybe pass it on. Until then, fail.
|
||||||
spin_lock(&port->port_lock);
|
*/
|
||||||
memcpy(&port->port_line_coding, req->buf, ret);
|
printk(KERN_WARNING "gs_setup: set_line_coding "
|
||||||
spin_unlock(&port->port_lock);
|
"unuspported\n");
|
||||||
}
|
|
||||||
ret = 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case USB_CDC_REQ_GET_LINE_CODING:
|
case USB_CDC_REQ_GET_LINE_CODING:
|
||||||
@@ -1713,11 +1711,18 @@ static int gs_setup_class(struct usb_gadget *gadget,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case USB_CDC_REQ_SET_CONTROL_LINE_STATE:
|
case USB_CDC_REQ_SET_CONTROL_LINE_STATE:
|
||||||
ret = 0;
|
/* FIXME Submit req to read the data; have its completion
|
||||||
|
* handler use that to set the state (iff it's valid) and
|
||||||
|
* maybe pass it on. Until then, fail.
|
||||||
|
*/
|
||||||
|
printk(KERN_WARNING "gs_setup: set_control_line_state "
|
||||||
|
"unuspported\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printk(KERN_ERR "gs_setup: unknown class request, type=%02x, request=%02x, value=%04x, index=%04x, length=%d\n",
|
printk(KERN_ERR "gs_setup: unknown class request, "
|
||||||
|
"type=%02x, request=%02x, value=%04x, "
|
||||||
|
"index=%04x, length=%d\n",
|
||||||
ctrl->bRequestType, ctrl->bRequest,
|
ctrl->bRequestType, ctrl->bRequest,
|
||||||
wValue, wIndex, wLength);
|
wValue, wIndex, wLength);
|
||||||
break;
|
break;
|
||||||
|
@@ -3404,6 +3404,7 @@ static void sisusb_disconnect(struct usb_interface *intf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct usb_device_id sisusb_table [] = {
|
static struct usb_device_id sisusb_table [] = {
|
||||||
|
{ USB_DEVICE(0x0711, 0x0550) },
|
||||||
{ USB_DEVICE(0x0711, 0x0900) },
|
{ USB_DEVICE(0x0711, 0x0900) },
|
||||||
{ USB_DEVICE(0x0711, 0x0901) },
|
{ USB_DEVICE(0x0711, 0x0901) },
|
||||||
{ USB_DEVICE(0x0711, 0x0902) },
|
{ USB_DEVICE(0x0711, 0x0902) },
|
||||||
|
@@ -138,7 +138,7 @@ static void free_dynids(struct usb_serial_driver *drv)
|
|||||||
static struct driver_attribute drv_attrs[] = {
|
static struct driver_attribute drv_attrs[] = {
|
||||||
__ATTR_NULL,
|
__ATTR_NULL,
|
||||||
};
|
};
|
||||||
static inline void free_dynids(struct usb_driver *drv)
|
static inline void free_dynids(struct usb_serial_driver *drv)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -568,6 +568,7 @@ static struct usb_device_id id_table_combined [] = {
|
|||||||
{ USB_DEVICE(ELEKTOR_VID, ELEKTOR_FT323R_PID) },
|
{ USB_DEVICE(ELEKTOR_VID, ELEKTOR_FT323R_PID) },
|
||||||
{ USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
|
{ USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
|
||||||
{ USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) },
|
{ USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) },
|
||||||
|
{ USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) },
|
||||||
{ USB_DEVICE(OLIMEX_VID, OLIMEX_ARM_USB_OCD_PID),
|
{ USB_DEVICE(OLIMEX_VID, OLIMEX_ARM_USB_OCD_PID),
|
||||||
.driver_info = (kernel_ulong_t)&ftdi_olimex_quirk },
|
.driver_info = (kernel_ulong_t)&ftdi_olimex_quirk },
|
||||||
{ }, /* Optional parameter entry */
|
{ }, /* Optional parameter entry */
|
||||||
|
@@ -534,6 +534,14 @@
|
|||||||
#define OLIMEX_VID 0x15BA
|
#define OLIMEX_VID 0x15BA
|
||||||
#define OLIMEX_ARM_USB_OCD_PID 0x0003
|
#define OLIMEX_ARM_USB_OCD_PID 0x0003
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The Mobility Lab (TML)
|
||||||
|
* Submitted by Pierre Castella
|
||||||
|
*/
|
||||||
|
#define TML_VID 0x1B91 /* Vendor ID */
|
||||||
|
#define TML_USB_SERIAL_PID 0x0064 /* USB - Serial Converter */
|
||||||
|
|
||||||
/* Commands */
|
/* Commands */
|
||||||
#define FTDI_SIO_RESET 0 /* Reset the port */
|
#define FTDI_SIO_RESET 0 /* Reset the port */
|
||||||
#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */
|
#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */
|
||||||
|
@@ -108,6 +108,7 @@ static int option_send_setup(struct usb_serial_port *port);
|
|||||||
#define HUAWEI_VENDOR_ID 0x12D1
|
#define HUAWEI_VENDOR_ID 0x12D1
|
||||||
#define HUAWEI_PRODUCT_E600 0x1001
|
#define HUAWEI_PRODUCT_E600 0x1001
|
||||||
#define HUAWEI_PRODUCT_E220 0x1003
|
#define HUAWEI_PRODUCT_E220 0x1003
|
||||||
|
#define HUAWEI_PRODUCT_E220BIS 0x1004
|
||||||
|
|
||||||
#define NOVATELWIRELESS_VENDOR_ID 0x1410
|
#define NOVATELWIRELESS_VENDOR_ID 0x1410
|
||||||
#define DELL_VENDOR_ID 0x413C
|
#define DELL_VENDOR_ID 0x413C
|
||||||
@@ -158,6 +159,7 @@ static struct usb_device_id option_ids[] = {
|
|||||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) },
|
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) },
|
||||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) },
|
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) },
|
||||||
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220) },
|
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220) },
|
||||||
|
{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS) },
|
||||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1100) }, /* Novatel Merlin XS620/S640 */
|
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1100) }, /* Novatel Merlin XS620/S640 */
|
||||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1110) }, /* Novatel Merlin S620 */
|
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1110) }, /* Novatel Merlin S620 */
|
||||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1120) }, /* Novatel Merlin EX720 */
|
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1120) }, /* Novatel Merlin EX720 */
|
||||||
@@ -176,6 +178,7 @@ static struct usb_device_id option_ids[] = {
|
|||||||
{ USB_DEVICE(DELL_VENDOR_ID, 0x8117) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */
|
{ USB_DEVICE(DELL_VENDOR_ID, 0x8117) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */
|
||||||
{ USB_DEVICE(DELL_VENDOR_ID, 0x8118) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */
|
{ USB_DEVICE(DELL_VENDOR_ID, 0x8118) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */
|
||||||
{ USB_DEVICE(DELL_VENDOR_ID, 0x8128) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */
|
{ USB_DEVICE(DELL_VENDOR_ID, 0x8128) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */
|
||||||
|
{ USB_DEVICE(DELL_VENDOR_ID, 0x8137) }, /* Dell Wireless HSDPA 5520 */
|
||||||
{ USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) },
|
{ USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) },
|
||||||
{ USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
|
{ USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
|
||||||
{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) },
|
{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) },
|
||||||
|
@@ -817,21 +817,6 @@ static int oti6858_ioctl(struct usb_serial_port *port, struct file *file,
|
|||||||
__FUNCTION__, port->number, cmd, arg);
|
__FUNCTION__, port->number, cmd, arg);
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case TCGETS:
|
|
||||||
if (kernel_termios_to_user_termios((struct ktermios __user *)arg,
|
|
||||||
port->tty->termios))
|
|
||||||
return -EFAULT;
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case TCSETS:
|
|
||||||
case TCSETSW: /* FIXME: this is not the same! */
|
|
||||||
case TCSETSF: /* FIXME: this is not the same! */
|
|
||||||
if (user_termios_to_kernel_termios(port->tty->termios,
|
|
||||||
(struct ktermios __user *)arg))
|
|
||||||
return -EFAULT;
|
|
||||||
oti6858_set_termios(port, NULL);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case TCFLSH:
|
case TCFLSH:
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -348,6 +348,13 @@ UNUSUAL_DEV( 0x04b0, 0x0411, 0x0100, 0x0101,
|
|||||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
US_FL_FIX_CAPACITY),
|
US_FL_FIX_CAPACITY),
|
||||||
|
|
||||||
|
/* Reported by Ortwin Glueck <odi@odi.ch> */
|
||||||
|
UNUSUAL_DEV( 0x04b0, 0x0413, 0x0110, 0x0110,
|
||||||
|
"NIKON",
|
||||||
|
"NIKON DSC D40",
|
||||||
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
|
US_FL_FIX_CAPACITY),
|
||||||
|
|
||||||
/* BENQ DC5330
|
/* BENQ DC5330
|
||||||
* Reported by Manuel Fombuena <mfombuena@ya.com> and
|
* Reported by Manuel Fombuena <mfombuena@ya.com> and
|
||||||
* Frank Copeland <fjc@thingy.apana.org.au> */
|
* Frank Copeland <fjc@thingy.apana.org.au> */
|
||||||
@@ -897,6 +904,22 @@ UNUSUAL_DEV( 0x069b, 0x3004, 0x0001, 0x0001,
|
|||||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
US_FL_FIX_CAPACITY ),
|
US_FL_FIX_CAPACITY ),
|
||||||
|
|
||||||
|
/* Reported by Massimiliano Ghilardi <massimiliano.ghilardi@gmail.com>
|
||||||
|
* This USB MP3/AVI player device fails and disconnects if more than 128
|
||||||
|
* sectors (64kB) are read/written in a single command, and may be present
|
||||||
|
* at least in the following products:
|
||||||
|
* "Magnex Digital Video Panel DVP 1800"
|
||||||
|
* "MP4 AIGO 4GB SLOT SD"
|
||||||
|
* "Teclast TL-C260 MP3"
|
||||||
|
* "i.Meizu PMP MP3/MP4"
|
||||||
|
* "Speed MV8 MP4 Audio Player"
|
||||||
|
*/
|
||||||
|
UNUSUAL_DEV( 0x071b, 0x3203, 0x0100, 0x0100,
|
||||||
|
"RockChip",
|
||||||
|
"ROCK MP3",
|
||||||
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
|
US_FL_MAX_SECTORS_64),
|
||||||
|
|
||||||
/* Reported by Olivier Blondeau <zeitoun@gmail.com> */
|
/* Reported by Olivier Blondeau <zeitoun@gmail.com> */
|
||||||
UNUSUAL_DEV( 0x0727, 0x0306, 0x0100, 0x0100,
|
UNUSUAL_DEV( 0x0727, 0x0306, 0x0100, 0x0100,
|
||||||
"ATMEL",
|
"ATMEL",
|
||||||
@@ -1393,6 +1416,13 @@ UNUSUAL_DEV( 0x0fce, 0xe030, 0x0000, 0x0000,
|
|||||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
US_FL_FIX_CAPACITY | US_FL_IGNORE_RESIDUE ),
|
US_FL_FIX_CAPACITY | US_FL_IGNORE_RESIDUE ),
|
||||||
|
|
||||||
|
/* Reported by Ricardo Barberis <ricardo@dattatec.com> */
|
||||||
|
UNUSUAL_DEV( 0x0fce, 0xe092, 0x0000, 0x0000,
|
||||||
|
"Sony Ericsson",
|
||||||
|
"P1i",
|
||||||
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
|
US_FL_IGNORE_RESIDUE ),
|
||||||
|
|
||||||
/* Reported by Emmanuel Vasilakis <evas@forthnet.gr> */
|
/* Reported by Emmanuel Vasilakis <evas@forthnet.gr> */
|
||||||
UNUSUAL_DEV( 0x0fce, 0xe031, 0x0000, 0x0000,
|
UNUSUAL_DEV( 0x0fce, 0xe031, 0x0000, 0x0000,
|
||||||
"Sony Ericsson",
|
"Sony Ericsson",
|
||||||
|
Reference in New Issue
Block a user