diff -Naur b/src/ccid.h a/src/ccid.h --- b/src/ccid.h 2011-10-11 22:27:44.000000000 +0200 +++ a/src/ccid.h 2011-12-28 22:37:15.046753381 +0100 @@ -201,6 +201,8 @@ #define KOBIL_MIDENTITY_VISUAL 0x0D460D46 #define VEGAALPHA 0x09820008 #define HPSMARTCARDKEYBOARD 0x03F01024 +#define BROADCOM_5800 0x0A5C5800 +#define BROADCOM_5801 0x0A5C5801 #define VENDOR_GEMALTO 0x08E6 #define GET_VENDOR(readerID) ((readerID >> 16) & 0xFFFF) diff -Naur b/src/ccid_usb.c a/src/ccid_usb.c --- b/src/ccid_usb.c 2011-10-11 22:27:44.000000000 +0200 +++ a/src/ccid_usb.c 2011-12-28 22:40:18.996763074 +0100 @@ -329,8 +329,9 @@ static int static_interface = 1; /* simulate a composite device as when libudev is used */ - if ((GEMALTOPROXDU == readerID) - || (GEMALTOPROXSU == readerID)) + if ((GEMALTOPROXDU == readerID) || (GEMALTOPROXSU == readerID) + || (BROADCOM_5800 == readerID)|| (BROADCOM_5801 == readerID)) + { /* * We can't talk to the two CCID interfaces diff -Naur b/src/ifdhandler.c a/src/ifdhandler.c --- b/src/ifdhandler.c 2011-10-11 22:27:44.000000000 +0200 +++ a/src/ifdhandler.c 2011-12-28 22:42:21.720103250 +0100 @@ -483,7 +483,8 @@ * multi-slot reader */ int readerID = get_ccid_descriptor(reader_index) -> readerID; - if ((GEMALTOPROXDU == readerID) || (GEMALTOPROXSU == readerID)) + if ((GEMALTOPROXDU == readerID) || (GEMALTOPROXSU == readerID) + || (BROADCOM_5800 == readerID) || (BROADCOM_5801 == readerID)) *Value = 2; } #endif