From: Gon Solo <gonsolo@gmail.com>
To: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Cc: Linux Media Mailing List <linux-media@vger.kernel.org>,
Mauro Carvalho Chehab <mchehab@infradead.org>, JP <jp@jpvw.nl>,
crope@iki.fi, Sean Young <sean@mess.org>,
Linux Kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 3/4] media: af9035: add support for Logilink VG0022A
Date: Thu, 10 Oct 2019 11:18:48 +0200 [thread overview]
Message-ID: <20191010091848.GA2898@Limone> (raw)
In-Reply-To: <20191009220418.GA3131@Limone>
Hi!
This patch works for me. It disables firmware downloading for the si2157
instead of the si2168.
Convert si2157 and si2168 to kernel-doc format as suggested by Mauro.
Use bits instead of bool. Add a flag to si2157 for not loading the
firmware. Make computation of speed register clear. Add hack for
Logilink VG0022A.
Signed-off-by: Andreas Wendleder <andreas.wendleder@gmail.com>
diff --git a/drivers/media/dvb-frontends/si2168.h b/drivers/media/dvb-frontends/si2168.h
index 50dccb394efa..ecd21adf8950 100644
--- a/drivers/media/dvb-frontends/si2168.h
+++ b/drivers/media/dvb-frontends/si2168.h
@@ -9,38 +9,43 @@
#define SI2168_H
#include <linux/dvb/frontend.h>
-/*
- * I2C address
- * 0x64
+/**
+ * struct si2168_config - configuration parameters for si2168
+ *
+ * @fe:
+ * frontend returned by driver
+ * @i2c_adapter:
+ * tuner I2C adapter returned by driver
+ * @ts_mode:
+ * Transport Stream mode. Can be:
+ * - %SI2168_TS_PARALLEL
+ * - %SI2168_TS_SERIAL
+ * - %SI2168_TS_TRISTATE
+ * - %SI2168_TS_CLK_MANUAL
+ * @ts_clock_inv:
+ * TS clock inverted
+ * @ts_clock_gapped:
+ * TS clock gapped
+ * @spectral_inversion:
+ * Inverted spectrum
+ *
+ * Note:
+ * The I2C address of this demod is 0x64.
*/
struct si2168_config {
- /*
- * frontend
- * returned by driver
- */
struct dvb_frontend **fe;
-
- /*
- * tuner I2C adapter
- * returned by driver
- */
struct i2c_adapter **i2c_adapter;
- /* TS mode */
#define SI2168_TS_PARALLEL 0x06
#define SI2168_TS_SERIAL 0x03
#define SI2168_TS_TRISTATE 0x00
#define SI2168_TS_CLK_MANUAL 0x20
u8 ts_mode;
- /* TS clock inverted */
- bool ts_clock_inv;
-
- /* TS clock gapped */
- bool ts_clock_gapped;
-
- /* Inverted spectrum */
- bool spectral_inversion;
+ /* Flags */
+ unsigned int ts_clock_inv:1;
+ unsigned int ts_clock_gapped:1;
+ unsigned int spectral_inversion:1;
};
#endif
diff --git a/drivers/media/dvb-frontends/si2168_priv.h b/drivers/media/dvb-frontends/si2168_priv.h
index 804d5b30c697..18bea5222082 100644
--- a/drivers/media/dvb-frontends/si2168_priv.h
+++ b/drivers/media/dvb-frontends/si2168_priv.h
@@ -34,12 +34,12 @@ struct si2168_dev {
unsigned int chip_id;
unsigned int version;
const char *firmware_name;
- bool active;
- bool warm;
u8 ts_mode;
- bool ts_clock_inv;
- bool ts_clock_gapped;
- bool spectral_inversion;
+ unsigned int active:1;
+ unsigned int warm:1;
+ unsigned int ts_clock_inv:1;
+ unsigned int ts_clock_gapped:1;
+ unsigned int spectral_inversion:1;
};
/* firmware command struct */
diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
index e87040d6eca7..898e0f9f8b70 100644
--- a/drivers/media/tuners/si2157.c
+++ b/drivers/media/tuners/si2157.c
@@ -118,6 +118,11 @@ static int si2157_init(struct dvb_frontend *fe)
goto err;
}
+ if (dev->dont_load_firmware) {
+ dev_info(&client->dev, "device is buggy, skipping firmware download\n");
+ goto skip_fw_download;
+ }
+
/* query chip revision */
memcpy(cmd.args, "\x02", 1);
cmd.wlen = 1;
@@ -440,6 +445,7 @@ static int si2157_probe(struct i2c_client *client,
i2c_set_clientdata(client, dev);
dev->fe = cfg->fe;
dev->inversion = cfg->inversion;
+ dev->dont_load_firmware = cfg->dont_load_firmware;
dev->if_port = cfg->if_port;
dev->chiptype = (u8)id->driver_data;
dev->if_frequency = 5000000; /* default value of property 0x0706 */
diff --git a/drivers/media/tuners/si2157.h b/drivers/media/tuners/si2157.h
index c22ca784f43f..ffdece3c2eaa 100644
--- a/drivers/media/tuners/si2157.h
+++ b/drivers/media/tuners/si2157.h
@@ -11,29 +11,34 @@
#include <media/media-device.h>
#include <media/dvb_frontend.h>
-/*
- * I2C address
- * 0x60
+/**
+ * struct si2157_config - configuration parameters for si2157
+ *
+ * @fe:
+ * frontend returned by driver
+ * @mdev:
+ * media device returned by driver
+ * @inversion:
+ * spectral inversion
+ * @dont_load_firmware:
+ * Instead of uploading a new firmware, use the existing one
+ * @if_port:
+ * Port selection
+ * Select the RF interface to use (pins 9+11 or 12+13)
+ *
+ * Note:
+ * The I2C address of this demod is 0x60.
*/
struct si2157_config {
- /*
- * frontend
- */
struct dvb_frontend *fe;
#if defined(CONFIG_MEDIA_CONTROLLER)
struct media_device *mdev;
#endif
- /*
- * Spectral Inversion
- */
- bool inversion;
+ unsigned int inversion:1;
+ unsigned int dont_load_firmware:1;
- /*
- * Port selection
- * Select the RF interface to use (pins 9+11 or 12+13)
- */
u8 if_port;
};
diff --git a/drivers/media/tuners/si2157_priv.h b/drivers/media/tuners/si2157_priv.h
index 2bda903358da..778f81b39996 100644
--- a/drivers/media/tuners/si2157_priv.h
+++ b/drivers/media/tuners/si2157_priv.h
@@ -23,8 +23,9 @@ enum si2157_pads {
struct si2157_dev {
struct mutex i2c_mutex;
struct dvb_frontend *fe;
- bool active;
- bool inversion;
+ unsigned int active:1;
+ unsigned int inversion:1;
+ unsigned int dont_load_firmware:1;
u8 chiptype;
u8 if_port;
u32 if_frequency;
diff --git a/drivers/media/usb/dvb-usb-v2/af9035.c b/drivers/media/usb/dvb-usb-v2/af9035.c
index 3afd18733614..792667ee5ebc 100644
--- a/drivers/media/usb/dvb-usb-v2/af9035.c
+++ b/drivers/media/usb/dvb-usb-v2/af9035.c
@@ -1197,6 +1197,15 @@ static int af9035_frontend_attach(struct dvb_usb_adapter *adap)
return ret;
}
+/*
+ * The I2C speed register is calculated with:
+ * I2C speed register = (1000000000 / (24.4 * 16 * I2C_speed))
+ *
+ * The default speed register for it930x is 7, with means a
+ * speed of ~366 kbps
+ */
+#define I2C_SPEED_366K 7
+
static int it930x_frontend_attach(struct dvb_usb_adapter *adap)
{
struct state *state = adap_to_priv(adap);
@@ -1208,13 +1217,13 @@ static int it930x_frontend_attach(struct dvb_usb_adapter *adap)
dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
- /* I2C master bus 2 clock speed 300k */
- ret = af9035_wr_reg(d, 0x00f6a7, 0x07);
+ /* I2C master bus 2 clock speed 366k */
+ ret = af9035_wr_reg(d, 0x00f6a7, I2C_SPEED_366K);
if (ret < 0)
goto err;
- /* I2C master bus 1,3 clock speed 300k */
- ret = af9035_wr_reg(d, 0x00f103, 0x07);
+ /* I2C master bus 1,3 clock speed 366k */
+ ret = af9035_wr_reg(d, 0x00f103, I2C_SPEED_366K);
if (ret < 0)
goto err;
@@ -1610,6 +1619,24 @@ static int it930x_tuner_attach(struct dvb_usb_adapter *adap)
memset(&si2157_config, 0, sizeof(si2157_config));
si2157_config.fe = adap->fe[0];
+
+ /*
+ * HACK: The Logilink VG0022A has a bug: when the si2157
+ * firmware that came with the device is replaced by a new
+ * one, the I2C transfers to the tuner will return just 0xff.
+ *
+ * Probably, the vendor firmware has some patch specifically
+ * designed for this device. So, we can't replace by the
+ * generic firmware. The right solution would be to extract
+ * the si2157 firmware from the original driver and ask the
+ * driver to load the specifically designed firmware, but,
+ * while we don't have that, the next best solution is to just
+ * keep the original firmware at the device.
+ */
+ if (le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_DEXATEK &&
+ le16_to_cpu(d->udev->descriptor.idProduct) == 0x0100)
+ si2157_config.dont_load_firmware = true;
+
si2157_config.if_port = it930x_addresses_table[state->it930x_addresses].tuner_if_port;
ret = af9035_add_i2c_dev(d, "si2157",
it930x_addresses_table[state->it930x_addresses].tuner_i2c_addr,
@@ -2121,6 +2148,8 @@ static const struct usb_device_id af9035_id_table[] = {
&it930x_props, "ITE 9303 Generic", NULL) },
{ DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_TD310,
&it930x_props, "AVerMedia TD310 DVB-T2", NULL) },
+ { DVB_USB_DEVICE(USB_VID_DEXATEK, 0x0100,
+ &it930x_props, "Logilink VG0022A", NULL) },
{ }
};
MODULE_DEVICE_TABLE(usb, af9035_id_table);
next prev parent reply other threads:[~2019-10-10 9:18 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-30 10:32 DVB-T2 Stick Gonsolo
2019-02-19 21:30 ` Sean Young
2019-10-01 22:19 ` Gonsolo
2019-10-01 23:52 ` Mauro Carvalho Chehab
2019-10-02 14:13 ` [PATCH] si2157: Add support for Logilink VG0022A Gon Solo
2019-10-02 14:13 ` Gon Solo
2019-10-02 14:27 ` Sean Young
2019-10-02 14:44 ` Gonsolo
2019-10-02 15:06 ` Sean Young
2019-10-02 15:21 ` Gonsolo
2019-10-02 17:23 ` JP
2019-10-02 18:49 ` Mauro Carvalho Chehab
2019-10-03 8:06 ` [PATCH 0/1] Testing timing patch " Gon Solo
2019-10-03 8:06 ` [PATCH 1/1] Test Mauros timing patch Gon Solo
2019-10-03 10:13 ` [PATCH] si2157: Add support for Logilink VG0022A Gonsolo
2019-10-03 10:57 ` Gonsolo
2019-10-03 11:17 ` Mauro Carvalho Chehab
2019-10-03 11:41 ` Gonsolo
2019-10-03 12:49 ` Mauro Carvalho Chehab
2019-10-03 12:52 ` Mauro Carvalho Chehab
2019-10-03 13:02 ` Gon Solo
2019-10-03 13:53 ` Gonsolo
2019-10-03 14:05 ` Mauro Carvalho Chehab
2019-10-03 14:29 ` Gonsolo
2019-10-03 12:01 ` Gon Solo
2019-10-03 12:12 ` Mauro Carvalho Chehab
2019-10-03 12:20 ` Gon Solo
2019-10-03 12:45 ` [PATCH 0/3] " Gon Solo
2019-10-03 12:45 ` [PATCH 1/3] [PATCH] af9035: Better explain how i2c bus speed is computed Gon Solo
2019-10-03 12:45 ` [PATCH 2/3] [PATCH] s2157: Handle bogus chip version Gon Solo
2019-10-03 12:45 ` [PATCH 3/3] [PATCH] af9035: Add Logilink VG0022A id Gon Solo
2019-10-03 11:05 ` [PATCH] si2157: Add support for Logilink VG0022A Mauro Carvalho Chehab
2019-10-03 15:00 ` Gonsolo
2019-10-03 15:02 ` Mauro Carvalho Chehab
2019-10-03 15:17 ` Gonsolo
2019-10-03 16:03 ` Gon Solo
2019-10-03 16:09 ` Mauro Carvalho Chehab
2019-10-03 16:23 ` Gon Solo
2019-10-03 17:42 ` Mauro Carvalho Chehab
2019-10-03 17:49 ` Gonsolo
2019-10-03 18:32 ` Gon Solo
2019-10-03 18:42 ` JP
2019-10-03 18:50 ` Gonsolo
2019-10-03 18:53 ` Gonsolo
2019-10-03 19:19 ` Gonsolo
2019-10-03 19:39 ` Mauro Carvalho Chehab
2019-10-03 19:44 ` Mauro Carvalho Chehab
2019-10-03 19:51 ` Gonsolo
2019-10-03 20:03 ` Mauro Carvalho Chehab
2019-10-03 20:32 ` Gonsolo
2019-10-04 11:50 ` JP
2019-10-04 12:08 ` Mauro Carvalho Chehab
2019-10-04 13:15 ` [PATCH 1/4] media: si2168: use bits instead of bool for flags Mauro Carvalho Chehab
2019-10-04 13:15 ` [PATCH 2/4] media: si2168: add support for not loading a firmware Mauro Carvalho Chehab
2019-10-04 13:15 ` [PATCH 3/4] media: af9035: add support for Logilink VG0022A Mauro Carvalho Chehab
2019-10-09 21:44 ` Gon Solo
2019-10-09 22:04 ` Gon Solo
2019-10-10 8:23 ` Gon Solo
2019-10-10 9:18 ` Gon Solo [this message]
2019-10-10 9:50 ` [PATCH 0/4] Add " Gon Solo
2019-10-10 10:10 ` Mauro Carvalho Chehab
2019-10-10 9:51 ` [PATCH 1/4] si2168: Use bits and convert to kernel-doc format Gon Solo
2019-10-10 9:51 ` [PATCH 2/4] si2157: Add option for not downloading firmware Gon Solo
2019-10-10 9:51 ` [PATCH 3/4] af9035: Make speed computation clear Gon Solo
2019-10-10 9:51 ` [PATCH 4/4] Add support for Logilink VG0022A Gon Solo
2019-10-10 11:44 ` Gon Solo
2019-11-15 18:06 ` Gon Solo
2019-10-04 13:15 ` [PATCH 4/4] media: af9035: add the formula used for the I2C speed Mauro Carvalho Chehab
2019-10-10 10:55 ` [PATCH 1/4] media: si2168: use bits instead of bool for flags Gon Solo
2019-10-10 11:34 ` Mauro Carvalho Chehab
2019-10-10 11:42 ` Mauro Carvalho Chehab
2019-10-04 13:50 ` [PATCH] si2157: Add support for Logilink VG0022A JP
2019-10-04 14:16 ` Mauro Carvalho Chehab
2019-10-03 19:40 ` Gonsolo
2019-10-03 19:52 ` Mauro Carvalho Chehab
2019-10-03 19:57 ` Gonsolo
2019-10-02 15:00 ` Mauro Carvalho Chehab
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191010091848.GA2898@Limone \
--to=gonsolo@gmail.com \
--cc=crope@iki.fi \
--cc=jp@jpvw.nl \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab+samsung@kernel.org \
--cc=mchehab@infradead.org \
--cc=sean@mess.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.