Re: Linux support for SiLabs CP210x devices

From: Greg KH
Date: Wed May 18 2005 - 11:18:11 EST


Back in November of last year, I wrote about how SiLabs were
distributing a binary only version of a usb-serial driver for Linux that
was violating the GPL <http://thread.gmane.org/gmane.linux.kernel/256403>

Well, it looks like SiLabs and MCCI have finally released the source
code to their driver, but in obfuscated form. I've attached the .zip
file to this message so that everyone can see this horrible nightmare of
a "driver". As per the GPL, they are still violating the license as
obfuscated code releases is not allowed. And as such, they are still
violating my copyright, and the copyrights of a few other kernel
developers.

So, just to re-iterate, I very soundly do not recommend ever buying any
devices from this company, as if this is the way they treat well
established legal issues, who know what else they have done...

Oh, and if you don't want to go through the trouble of opening up the
zip file, I've included inline their header file, in all of it's glory,
with no changes made by me at all, below.

And yes, if you notice the 2.6 kernel does now support this device, but
that is because of some people reverse engineering the device. It was
by no help of the company involved (when seeing this code, those
developers just laughed and said it would be more work to try to read it
than to finish up the driver itself.)

thanks,

greg k-h

-------------------- actual .h file is below -------

#ifndef \
O1001101000
#define \
O1001101000 \

#define \
l1001101001 \
\
0200
#define \
l1001101010 \
\
0x00
#define \
l1001101011 \
\
0201
#define \
O1001101100 \
\
0x01
#define \
l1001101101 \
\
0x82
#define \
l1001101110 \
\
0x02
#define \
O1001101111 \
\
0x83
#define \
l1001110000 \
\
0x03
#define \
O1001110001 \
\
0xa0
#define \
O1001110010 \
\
0x20
#define \
O1001110011 \
\
0xa1
#define \
O1001110100 \
\
0x21
#define \
O1001110101 \
\
0242
#define \
O1001110110 \
\
0x22
#define \
O1001110111 \
\
0243
#define \
l1001111000 \
\
043
#define \
O1001111001 \
\
0300
#define \
O1001111010 \
\
0100
#define \
O1001111011 \
\
0xc1
#define \
l1001111100 \
\
0x41
#define \
O1001111101 \
\
0302
#define \
O1001111110 \
\
0102
#define \
l1001111111 \
\
0xc3
#define \
l1010000000 \
\
0x43
#define \
l1010000001 \
\
(7)
#define \
l1010000010 \
\
(1 << l1010000001)
#define \
O1010000011 \
\
(0 << l1010000001)
#define \
O1010000100 \
\
(1 << l1010000001)
#define \
O1010000101 \
\
(5)
#define \
O1010000110 \
\
(3 << O1010000101)
#define \
l1010000111 \
\
(0 << O1010000101)
#define \
l1010001000 \
\
(1 << O1010000101)
#define \
O1010001001 \
\
(2 << O1010000101)
#define \
l1010001010 \
\
(3 << O1010000101)
#define \
O1010001011 \
\
(0)
#define \
O1010001100 \
\
(0x1f << O1010001011)
#define \
l1010001101 \
\
(0x00 << O1010001011)
#define \
O1010001110 \
\
(0x01 << O1010001011)
#define \
l1010001111 \
\
(0x02 << O1010001011)
#define \
O1010010000 \
\
(0x03 << O1010001011)
#define \
O1010010001 \
\
0
#define \
l1010010010 \
\
1
#define \
l1010010011 \
\
3
#define \
l1010010100 \
\
5
#define \
l1010010101 \
\
6
#define \
l1010010110 \
\
7
#define \
O1010010111 \
\
8
#define \
l1010011000 \
\
011
#define \
O1010011001 \
\
0xa
#define \
O1010011010 \
\
0xb
#define \
l1010011011 \
\
0xc
#define \
l1010011100 \
\
1
#define \
O1010011101 \
\
2
#define \
l1010011110 \
\
3
#define \
l1010011111 \
\
4
#define \
l1010100000 \
\
5
#define \
l1010100001 \
\
0
#define \
l1010100010 \
\
1
#define \
O1010100011 \
\
2
#define \
l1010100100 \
\
3
#define \
O1010100101 \
\
0
#define \
l1010100110 \
\
1
#define \
O1010100111 \
\
0x80
#define \
l1010101000 \
\
0x0f
#define \
O1010101001 \
\
(1 << 0)
#define \
O1010101010 \
\
(1 << 1)
#define \
O1010101011 \
\
(1 << 0)
#endif

Attachment: Linux.zip.gz
Description: application/gunzip