Asus U3100 Mini plus DVB-T
There is now kernel support for the demodulator and the USB bridge (af9035 chip) and for the tuner (FC2580).
Glue code to support the Asus U3100 Mini plus has now landed in the current staging tree and has been pull-requested for 3.7.
http://git.linuxtv.org/media_tree.git/tree/staging/for_v3.7
did | vendor | device | standard | supported | pic | url | hostinterface | usbid | hw | tuner | demodulator | usbbridge | fw | comment | E |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
asus-my-cinema-u3100-mini-plus | ASUS | My Cinema U3100 Mini Plus DVBT Tuner | DVB-T | ✔ Yes,✔ Yes, in kernel since 3.7 | [1] | USB2.0 | 0b05:1779 | Afatech AF9035 | FCI2580 | af9033 | af9035 | [2] | There's an older device by almost the same name (without the "plus"), which is dib7xxx based and works out of the box. | ||
asus-my-cinema-u3100-mini-plus-v2 | ASUS | My Cinema U3100 Mini Plus V2 | DVB-T | ✔ Yes | [3] | USB2.0 | 1b80:d393 | Afatech DVB-T receiver [RTL2832U] |
Image of the tuner and USB Bridge/Demodulator.
Image of the other side of the V2
USB Quircks should no longer be needed for this device. For the time being still listed here.
options usbhid quirks=0x0b05:0x1779:0x0004
The original rare drivers v9.08.14.1 had been uploaded to http://ubuntuforums.org/showpost.php?p=10176778&postcount=20
Compiling v9.08.14.1 may be very adventurous. I have made some pathology to original driver :) and reduce it only to ASUS_U3100_mini device and fix various incompatibilities. Minimum additional modification are needed to installing. Works well for kernel < 2.6.35.
This old driver currently still lives in my git repository for the AF903x and keep pushing changes I receive until 3.7 is released.
09.07.2013 The device does not seem to work. Seems to be a problem with I2C communication between frontend and tuner. The error is
dvb_usb_v2: 'Asus U3100Mini Plus' error while loading driver (-19) dvb_usb_v2: 'Asus U3100Mini Plus' successfully deinitialized and disconnected
19.07.2013 Ubuntu 13.04, kernel 3.11.0-999-generic #201307180423 x86_64, firmware http://palosaari.fi/linux/v4l-dvb/firmware/af9035/dvb-usb-af9035-02.fw_f71efe295151ba76cac2280680b69f3f_11.5.9.0_5.17.9.1. In circa 1 case of 50 is the device successfully identified by i2c and working:
Jul 18 22:08:22 thinkpad kernel: [ 2249.356481] i2c i2c-6: af9033: firmware version: LINK=11.5.9.0 OFDM=5.17.9.1 Jul 18 22:08:22 thinkpad kernel: [ 2249.360331] usb 1-1: DVB: registering adapter 0 frontend 0 (Afatech AF9033 (DVB-T))... Jul 18 22:08:22 thinkpad kernel: [ 2249.412901] i2c i2c-6: fc2580: FCI FC2580 successfully identified Jul 18 22:08:22 thinkpad kernel: [ 2249.424688] usb 1-1: dvb_usb_v2: 'Asus U3100Mini Plus' successfully initialized and connected
Otherwise it throws the "error while loading driver (-19)" mention above. Full part of syslog and file contents I have collected from /sys/bus/i2c/devices/i2c-6/device/ for debugging can be found here: http://ubuntuone.com/5u0sfwtb2HZihFScRGsaPR .
20.02.2014 I have seen the same problem. I have made a little change on the /usr/src/linux/drivers/media/tuners/fc2580.c file, and compiled a new fc2580.ko module, and it works fine.
struct dvb_frontend *fc2580_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct fc2580_config *cfg) { struct fc2580_priv *priv; int ret; u8 chip_id;
if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 1);
priv = kzalloc(sizeof(struct fc2580_priv), GFP_KERNEL); if (!priv) { ret = -ENOMEM; dev_err(&i2c->dev, "%s: kzalloc() failed\n", KBUILD_MODNAME); goto err; }
priv->cfg = cfg; priv->i2c = i2c;
/* check if the tuner is there */ ret = fc2580_rd_reg(priv, 0x01, &chip_id); /* *************** COMMENT OUT THIS PART ***************************** if (ret < 0) goto err;
dev_dbg(&priv->i2c->dev, "%s: chip_id=%02x\n", __func__, chip_id);
switch (chip_id) { case 0x56: case 0x5a: break; default: goto err; }
********************************************************* */
dev_info(&priv->i2c->dev, "%s: FCI FC2580 successfully identified\n", KBUILD_MODNAME);
fe->tuner_priv = priv; memcpy(&fe->ops.tuner_ops, &fc2580_tuner_ops, sizeof(struct dvb_tuner_ops));
if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0);
return fe; err: if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0);
dev_dbg(&i2c->dev, "%s: failed=%d\n", __func__, ret); kfree(priv); return NULL; }