Skip to contentSkip to conversation

dvb-usb-friio: decompose friio and merge with gl861

PATCH Superseded [email protected] 2 participants 7 messages Mar 28, 2018

Subsystems (2)

v4 of 7 Superseded Latest is v7 →

lore
Share & tools
lore
#0 lore raw

v4 cover dvb-usb-friio: decompose friio and merge with gl861

From: Akihiro Tsukada <[email protected]>

This series decomposes dvb-usb-friio into sub drivers and merge the bridge driver with dvb-usb-gl861.
As to the demod & tuner drivers, existing drivers are re-used.

Changes since v3:
- dvb-pll,gl681: use i2c_device_id/i2c_board_info to specify pll_desc

Changes since v2:
- used the new i2c binding helpers instead of my own one
- extends dvb-pll instead of creating a new tuner driver
- merged gl861-friio.c with gl861.c
- improved module counting
- made i2c communications on USB robust (regarding DMA)

Replaces:
patch #27927, dvb: tua6034: add a new driver for Infineon tua6034 tuner patch #27928, dvb-usb-friio: split and merge into dvb-usbv2-gl861

Akihiro Tsukada (5):
dvb-frontends/dvb-pll: add i2c driver support dvb-frontends/dvb-pll: add tua6034 ISDB-T tuner used in Friio dvb-usb/friio, dvb-usb-v2/gl861: decompose friio and merge with gl861 dvb-usb-v2/gl861: use usleep_range() for short delay dvb-usb-v2/gl861: ensure USB message buffers DMA'able

 drivers/media/dvb-frontends/dvb-pll.c |  86 ++++++
 drivers/media/dvb-frontends/dvb-pll.h |  26 ++
 drivers/media/usb/dvb-usb-v2/Kconfig  |   5 +-
 drivers/media/usb/dvb-usb-v2/gl861.c  | 485 ++++++++++++++++++++++++++++++-
 drivers/media/usb/dvb-usb-v2/gl861.h  |   1 +
 drivers/media/usb/dvb-usb/Kconfig     |   6 -
 drivers/media/usb/dvb-usb/Makefile    |   3 -
 drivers/media/usb/dvb-usb/friio-fe.c  | 441 ----------------------------
 drivers/media/usb/dvb-usb/friio.c     | 522 ----------------------------------
 drivers/media/usb/dvb-usb/friio.h     |  99 -------
 10 files changed, 591 insertions(+), 1083 deletions(-)
 delete mode 100644 drivers/media/usb/dvb-usb/friio-fe.c
 delete mode 100644 drivers/media/usb/dvb-usb/friio.c
 delete mode 100644 drivers/media/usb/dvb-usb/friio.h
Signature · 1 line
2.16.3
#1 lore raw

PATCH v4 1/5 dvb-frontends/dvb-pll: add i2c driver support

From: Akihiro Tsukada <[email protected]>

registers the module as an i2c driver,
but keeps dvb_pll_attach() untouched for compatibility.

---
Changes since v3:
- use standard i2c_device_id instead of dvb_pll_config

 drivers/media/dvb-frontends/dvb-pll.c | 67 +++++++++++++++++++++++++++++++++++
 drivers/media/dvb-frontends/dvb-pll.h | 24 +++++++++++++
 2 files changed, 91 insertions(+)
drivers/media/dvb-frontends/dvb-pll.c +67 -0
index 5553b89b804..e2a93aae04f 100644
@@ -827,6 +827,73 @@ struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe, int pll_addr,
 }
 EXPORT_SYMBOL(dvb_pll_attach);
 
+
+static int
+dvb_pll_probe(struct i2c_client *client, const struct i2c_device_id *id)
+{
+	struct dvb_pll_config *cfg;
+	struct dvb_frontend *fe;
+	unsigned int desc_id;
+
+	cfg = client->dev.platform_data;
+	fe = cfg->fe;
+	i2c_set_clientdata(client, fe);
+	desc_id = (unsigned int) id->driver_data;
+
+	if (!dvb_pll_attach(fe, client->addr, client->adapter, desc_id))
+		return -ENOMEM;
+
+	dev_info(&client->dev, "DVB Simple Tuner attached.\n");
+	return 0;
+}
+
+static int dvb_pll_remove(struct i2c_client *client)
+{
+	struct dvb_frontend *fe;
+
+	fe = i2c_get_clientdata(client);
+	dvb_pll_release(fe);
+	return 0;
+}
+
+
+static const struct i2c_device_id dvb_pll_id[] = {
+	{DVB_PLL_THOMSON_DTT7579_NAME,        DVB_PLL_THOMSON_DTT7579},
+	{DVB_PLL_THOMSON_DTT759X_NAME,        DVB_PLL_THOMSON_DTT759X},
+	{DVB_PLL_LG_Z201_NAME,                DVB_PLL_LG_Z201},
+	{DVB_PLL_UNKNOWN_1_NAME,              DVB_PLL_UNKNOWN_1},
+	{DVB_PLL_TUA6010XS_NAME,              DVB_PLL_TUA6010XS},
+	{DVB_PLL_ENV57H1XD5_NAME,             DVB_PLL_ENV57H1XD5},
+	{DVB_PLL_TUA6034_NAME,                DVB_PLL_TUA6034},
+	{DVB_PLL_TDA665X_NAME,                DVB_PLL_TDA665X},
+	{DVB_PLL_TDED4_NAME,                  DVB_PLL_TDED4},
+	{DVB_PLL_TDHU2_NAME,                  DVB_PLL_TDHU2},
+	{DVB_PLL_SAMSUNG_TBMV_NAME,           DVB_PLL_SAMSUNG_TBMV},
+	{DVB_PLL_PHILIPS_SD1878_TDA8261_NAME, DVB_PLL_PHILIPS_SD1878_TDA8261},
+	{DVB_PLL_OPERA1_NAME,                 DVB_PLL_OPERA1},
+	{DVB_PLL_SAMSUNG_DTOS403IH102A_NAME,  DVB_PLL_SAMSUNG_DTOS403IH102A},
+	{DVB_PLL_SAMSUNG_TDTC9251DH0_NAME,    DVB_PLL_SAMSUNG_TDTC9251DH0},
+	{DVB_PLL_SAMSUNG_TBDU18132_NAME,      DVB_PLL_SAMSUNG_TBDU18132},
+	{DVB_PLL_SAMSUNG_TBMU24112_NAME,      DVB_PLL_SAMSUNG_TBMU24112},
+	{DVB_PLL_TDEE4_NAME,                  DVB_PLL_TDEE4},
+	{DVB_PLL_THOMSON_DTT7520X_NAME,       DVB_PLL_THOMSON_DTT7520X},
+	{}
+};
+
+
+MODULE_DEVICE_TABLE(i2c, dvb_pll_id);
+
+static struct i2c_driver dvb_pll_driver = {
+	.driver = {
+		.name = "dvb_pll",
+	},
+	.probe    = dvb_pll_probe,
+	.remove   = dvb_pll_remove,
+	.id_table = dvb_pll_id,
+};
+
+module_i2c_driver(dvb_pll_driver);
+
 MODULE_DESCRIPTION("dvb pll library");
 MODULE_AUTHOR("Gerd Knorr");
 MODULE_LICENSE("GPL");
drivers/media/dvb-frontends/dvb-pll.h +24 -0
index ca885e71d2f..e96994bf668 100644
@@ -30,6 +30,30 @@
 #define DVB_PLL_TDEE4		       18
 #define DVB_PLL_THOMSON_DTT7520X       19
 
+#define DVB_PLL_THOMSON_DTT7579_NAME	    "dtt7579"
+#define DVB_PLL_THOMSON_DTT759X_NAME        "dtt759x"
+#define DVB_PLL_LG_Z201_NAME                "z201"
+#define DVB_PLL_UNKNOWN_1_NAME              "unknown_1"
+#define DVB_PLL_TUA6010XS_NAME              "tua6010xs"
+#define DVB_PLL_ENV57H1XD5_NAME             "env57h1xd5"
+#define DVB_PLL_TUA6034_NAME                "tua6034"
+#define DVB_PLL_TDA665X_NAME                "tda665x"
+#define DVB_PLL_TDED4_NAME                  "tded4"
+#define DVB_PLL_TDHU2_NAME                  "tdhu2"
+#define DVB_PLL_SAMSUNG_TBMV_NAME           "tbmv"
+#define DVB_PLL_PHILIPS_SD1878_TDA8261_NAME "sd1878_tda8261"
+#define DVB_PLL_OPERA1_NAME                 "opera1"
+#define DVB_PLL_SAMSUNG_DTOS403IH102A_NAME  "dtos403ih102a"
+#define DVB_PLL_SAMSUNG_TDTC9251DH0_NAME    "tdtc9251dh0"
+#define DVB_PLL_SAMSUNG_TBDU18132_NAME      "tbdu18132"
+#define DVB_PLL_SAMSUNG_TBMU24112_NAME      "tbmu24112"
+#define DVB_PLL_TDEE4_NAME                  "tdee4"
+#define DVB_PLL_THOMSON_DTT7520X_NAME       "dtt7520x"
+
+struct dvb_pll_config {
+	struct dvb_frontend *fe;
+};
+
 #if IS_REACHABLE(CONFIG_DVB_PLL)
 /**
  * Attach a dvb-pll to the supplied frontend structure.
Signature · 1 line
2.16.3
#2 lore raw

Re: [PATCH v4 1/5] dvb-frontends/dvb-pll: add i2c driver support

Quoted 29 lines · On 03/28/2018 08:00 PM, [email protected] wrote:

From: Akihiro Tsukada <[email protected]>

registers the module as an i2c driver,
but keeps dvb_pll_attach() untouched for compatibility.

---
Changes since v3:
- use standard i2c_device_id instead of dvb_pll_config

  drivers/media/dvb-frontends/dvb-pll.c | 67 +++++++++++++++++++++++++++++++++++
  drivers/media/dvb-frontends/dvb-pll.h | 24 +++++++++++++
  2 files changed, 91 insertions(+)
drivers/media/dvb-frontends/dvb-pll.c +7 -0
index 5553b89b804..e2a93aae04f 100644
@@ -827,6 +827,73 @@ struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe, int pll_addr,
  }
  EXPORT_SYMBOL(dvb_pll_attach);
 
+
+static int
+dvb_pll_probe(struct i2c_client *client, const struct i2c_device_id *id)
+{
+	struct dvb_pll_config *cfg;
+	struct dvb_frontend *fe;
+	unsigned int desc_id;

drivers/media/dvb-frontends/dvb-pll.c struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe, int pll_addr, · line 846

Quoted 10 lines
drivers/media/dvb-frontends/dvb-pll.c +10 -0
+
+	cfg = client->dev.platform_data;
+	fe = cfg->fe;
+	i2c_set_clientdata(client, fe);
+	desc_id = (unsigned int) id->driver_data;
+
+	if (!dvb_pll_attach(fe, client->addr, client->adapter, desc_id))
+		return -ENOMEM;
+
+	dev_info(&client->dev, "DVB Simple Tuner attached.\n");

Print used pll chip name here

Quoted 70 lines
drivers/media/dvb-frontends/dvb-pll.c +50 -0
+	return 0;
+}
+
+static int dvb_pll_remove(struct i2c_client *client)
+{
+	struct dvb_frontend *fe;
+
+	fe = i2c_get_clientdata(client);
+	dvb_pll_release(fe);
+	return 0;
+}
+
+
+static const struct i2c_device_id dvb_pll_id[] = {
+	{DVB_PLL_THOMSON_DTT7579_NAME,        DVB_PLL_THOMSON_DTT7579},
+	{DVB_PLL_THOMSON_DTT759X_NAME,        DVB_PLL_THOMSON_DTT759X},
+	{DVB_PLL_LG_Z201_NAME,                DVB_PLL_LG_Z201},
+	{DVB_PLL_UNKNOWN_1_NAME,              DVB_PLL_UNKNOWN_1},
+	{DVB_PLL_TUA6010XS_NAME,              DVB_PLL_TUA6010XS},
+	{DVB_PLL_ENV57H1XD5_NAME,             DVB_PLL_ENV57H1XD5},
+	{DVB_PLL_TUA6034_NAME,                DVB_PLL_TUA6034},
+	{DVB_PLL_TDA665X_NAME,                DVB_PLL_TDA665X},
+	{DVB_PLL_TDED4_NAME,                  DVB_PLL_TDED4},
+	{DVB_PLL_TDHU2_NAME,                  DVB_PLL_TDHU2},
+	{DVB_PLL_SAMSUNG_TBMV_NAME,           DVB_PLL_SAMSUNG_TBMV},
+	{DVB_PLL_PHILIPS_SD1878_TDA8261_NAME, DVB_PLL_PHILIPS_SD1878_TDA8261},
+	{DVB_PLL_OPERA1_NAME,                 DVB_PLL_OPERA1},
+	{DVB_PLL_SAMSUNG_DTOS403IH102A_NAME,  DVB_PLL_SAMSUNG_DTOS403IH102A},
+	{DVB_PLL_SAMSUNG_TDTC9251DH0_NAME,    DVB_PLL_SAMSUNG_TDTC9251DH0},
+	{DVB_PLL_SAMSUNG_TBDU18132_NAME,      DVB_PLL_SAMSUNG_TBDU18132},
+	{DVB_PLL_SAMSUNG_TBMU24112_NAME,      DVB_PLL_SAMSUNG_TBMU24112},
+	{DVB_PLL_TDEE4_NAME,                  DVB_PLL_TDEE4},
+	{DVB_PLL_THOMSON_DTT7520X_NAME,       DVB_PLL_THOMSON_DTT7520X},
+	{}
+};
+
+
+MODULE_DEVICE_TABLE(i2c, dvb_pll_id);
+
+static struct i2c_driver dvb_pll_driver = {
+	.driver = {
+		.name = "dvb_pll",
+	},
+	.probe    = dvb_pll_probe,
+	.remove   = dvb_pll_remove,
+	.id_table = dvb_pll_id,
+};
+
+module_i2c_driver(dvb_pll_driver);
+
  MODULE_DESCRIPTION("dvb pll library");
  MODULE_AUTHOR("Gerd Knorr");
  MODULE_LICENSE("GPL");
drivers/media/dvb-frontends/dvb-pll.h +9 -0
index ca885e71d2f..e96994bf668 100644
@@ -30,6 +30,30 @@
  #define DVB_PLL_TDEE4		       18
  #define DVB_PLL_THOMSON_DTT7520X       19
 
+#define DVB_PLL_THOMSON_DTT7579_NAME	    "dtt7579"
+#define DVB_PLL_THOMSON_DTT759X_NAME        "dtt759x"
+#define DVB_PLL_LG_Z201_NAME                "z201"
+#define DVB_PLL_UNKNOWN_1_NAME              "unknown_1"
+#define DVB_PLL_TUA6010XS_NAME              "tua6010xs"
+#define DVB_PLL_ENV57H1XD5_NAME             "env57h1xd5"
+#define DVB_PLL_TUA6034_NAME                "tua6034"
+#define DVB_PLL_TDA665X_NAME                "tda665x"
+#define DVB_PLL_TDED4_NAME                  "tded4"

drivers/media/dvb-frontends/dvb-pll.h line 51

Quoted 10 lines
drivers/media/dvb-frontends/dvb-pll.h +10 -0
+#define DVB_PLL_TDHU2_NAME                  "tdhu2"
+#define DVB_PLL_SAMSUNG_TBMV_NAME           "tbmv"
+#define DVB_PLL_PHILIPS_SD1878_TDA8261_NAME "sd1878_tda8261"
+#define DVB_PLL_OPERA1_NAME                 "opera1"
+#define DVB_PLL_SAMSUNG_DTOS403IH102A_NAME  "dtos403ih102a"
+#define DVB_PLL_SAMSUNG_TDTC9251DH0_NAME    "tdtc9251dh0"
+#define DVB_PLL_SAMSUNG_TBDU18132_NAME      "tbdu18132"
+#define DVB_PLL_SAMSUNG_TBMU24112_NAME      "tbmu24112"
+#define DVB_PLL_TDEE4_NAME                  "tdee4"
+#define DVB_PLL_THOMSON_DTT7520X_NAME       "dtt7520x"

Defining these names like that does not give any value. IMHO better to just add those chip names directly to chip id table.

Quoted 9 lines
drivers/media/dvb-frontends/dvb-pll.h +5 -0
+
+struct dvb_pll_config {
+	struct dvb_frontend *fe;
+};
+
  #if IS_REACHABLE(CONFIG_DVB_PLL)
  /**
   * Attach a dvb-pll to the supplied frontend structure.
Signature · 1 line
http://palosaari.fi/
#3 lore raw

PATCH v4 2/5 dvb-frontends/dvb-pll: add tua6034 ISDB-T tuner used in Friio

In reply to [email protected]

From: Akihiro Tsukada <[email protected]>

This driver already contains tua6034-based device settings, but they are not for ISDB-T and have different parameters.

---
Changes since v3:
- rebase on the new style of specifying pll_desc

Changes since v2:
(patch #27927 dvb: tua6034: add a new driver for Infineon tua6034 tuner)
- extends dvb-pll instead of creating a new driver

 drivers/media/dvb-frontends/dvb-pll.c | 19 +++++++++++++++++++
 drivers/media/dvb-frontends/dvb-pll.h |  2 ++
 2 files changed, 21 insertions(+)
drivers/media/dvb-frontends/dvb-pll.c +19 -0
index e2a93aae04f..deb27aefb9b 100644
@@ -533,6 +533,23 @@ static const struct dvb_pll_desc dvb_pll_alps_tdee4 = {
 	}
 };
 
+/* Infineon TUA6034 ISDB-T, used in Friio */
+/* CP cur. 50uA, AGC takeover: 103dBuV, PORT3 on */
+static const struct dvb_pll_desc dvb_pll_tua6034_friio = {
+	.name   = "Infineon TUA6034 ISDB-T (Friio)",
+	.min    =  90000000,
+	.max    = 770000000,
+	.iffreq =  57000000,
+	.initdata = (u8[]){ 4, 0x9a, 0x50, 0xb2, 0x08 },
+	.sleepdata = (u8[]){ 4, 0x9a, 0x70, 0xb3, 0x0b },
+	.count = 3,
+	.entries = {
+		{ 170000000, 142857, 0xba, 0x09 },
+		{ 470000000, 142857, 0xba, 0x0a },
+		{ 770000000, 142857, 0xb2, 0x08 },
+	}
+};
+
 /* ----------------------------------------------------------- */
 
 static const struct dvb_pll_desc *pll_list[] = {
@@ -556,6 +573,7 @@ static const struct dvb_pll_desc *pll_list[] = {
 	[DVB_PLL_SAMSUNG_TDTC9251DH0]    = &dvb_pll_samsung_tdtc9251dh0,
 	[DVB_PLL_SAMSUNG_TBDU18132]	 = &dvb_pll_samsung_tbdu18132,
 	[DVB_PLL_SAMSUNG_TBMU24112]      = &dvb_pll_samsung_tbmu24112,
+	[DVB_PLL_TUA6034_FRIIO]          = &dvb_pll_tua6034_friio,
 };
 
 /* ----------------------------------------------------------- */
@@ -877,6 +895,7 @@ static const struct i2c_device_id dvb_pll_id[] = {
 	{DVB_PLL_SAMSUNG_TBMU24112_NAME,      DVB_PLL_SAMSUNG_TBMU24112},
 	{DVB_PLL_TDEE4_NAME,                  DVB_PLL_TDEE4},
 	{DVB_PLL_THOMSON_DTT7520X_NAME,       DVB_PLL_THOMSON_DTT7520X},
+	{DVB_PLL_TUA6034_FRIIO_NAME,          DVB_PLL_TUA6034_FRIIO},
 	{}
 };
 
drivers/media/dvb-frontends/dvb-pll.h +2 -0
index e96994bf668..c1c27c0d1b1 100644
@@ -29,6 +29,7 @@
 #define DVB_PLL_SAMSUNG_TBMU24112      17
 #define DVB_PLL_TDEE4		       18
 #define DVB_PLL_THOMSON_DTT7520X       19
+#define DVB_PLL_TUA6034_FRIIO          20
 
 #define DVB_PLL_THOMSON_DTT7579_NAME	    "dtt7579"
 #define DVB_PLL_THOMSON_DTT759X_NAME        "dtt759x"
@@ -49,6 +50,7 @@
 #define DVB_PLL_SAMSUNG_TBMU24112_NAME      "tbmu24112"
 #define DVB_PLL_TDEE4_NAME                  "tdee4"
 #define DVB_PLL_THOMSON_DTT7520X_NAME       "dtt7520x"
+#define DVB_PLL_TUA6034_FRIIO_NAME          "tua6034_friio"
 
 struct dvb_pll_config {
 	struct dvb_frontend *fe;
Signature · 1 line
2.16.3
#4 lore raw

PATCH v5 3/5 dvb-usb/friio, dvb-usb-v2/gl861: decompose friio and merge with gl861

In reply to [email protected]

From: Akihiro Tsukada <[email protected]>

Friio device contains "gl861" bridge and "tc90522" demod, for which the separate drivers are already in the kernel. But friio driver was monolithic and did not use them, practically copying those features.
This patch decomposes friio driver into sub drivers and re-uses existing ones, thus reduces some code.

It adds some features to gl861,
to support the friio-specific init/config of the devices and implement i2c communications to the tuner via demod with USB vendor requests.

---
Changes since v4:
- use new style of specifying pll_desc of the tuner driver

Changes since v3:
- make dvb_usb_device_properties static

Changes since v2:
(patch #27928, dvb-usb-friio: split and merge into dvb-usbv2-gl861)
- used the new i2c binding helpers instead of my own one
- merged gl861-friio.c with gl861.c

 drivers/media/usb/dvb-usb-v2/Kconfig |   5 +-
 drivers/media/usb/dvb-usb-v2/gl861.c | 465 ++++++++++++++++++++++++++++++-
 drivers/media/usb/dvb-usb-v2/gl861.h |   1 +
 drivers/media/usb/dvb-usb/Kconfig    |   6 -
 drivers/media/usb/dvb-usb/Makefile   |   3 -
 drivers/media/usb/dvb-usb/friio-fe.c | 441 -----------------------------
 drivers/media/usb/dvb-usb/friio.c    | 522 -----------------------------------
 drivers/media/usb/dvb-usb/friio.h    |  99 -------
 8 files changed, 462 insertions(+), 1080 deletions(-)
 delete mode 100644 drivers/media/usb/dvb-usb/friio-fe.c
 delete mode 100644 drivers/media/usb/dvb-usb/friio.c
 delete mode 100644 drivers/media/usb/dvb-usb/friio.h
drivers/media/usb/dvb-usb-v2/Kconfig +4 -1
index 0e4944b2b0f..e0a1f377295 100644
@@ -95,10 +95,13 @@ config DVB_USB_GL861
 	tristate "Genesys Logic GL861 USB2.0 support"
 	depends on DVB_USB_V2
 	select DVB_ZL10353 if MEDIA_SUBDRV_AUTOSELECT
+	select DVB_TC90522 if MEDIA_SUBDRV_AUTOSELECT
 	select MEDIA_TUNER_QT1010 if MEDIA_SUBDRV_AUTOSELECT
+	select DVB_PLL if MEDIA_SUBDRV_AUTOSELECT
 	help
 	  Say Y here to support the MSI Megasky 580 (55801) DVB-T USB2.0
-	  receiver with USB ID 0db0:5581.
+	  receiver with USB ID 0db0:5581, Friio White ISDB-T receiver
+	  with USB ID 0x7a69:0001.
 
 config DVB_USB_LME2510
 	tristate "LME DM04/QQBOX DVB-S USB2.0 support"
drivers/media/usb/dvb-usb-v2/gl861.c +457 -8

502 lines not on this page · raw message

drivers/media/usb/dvb-usb-v2/gl861.h +1 -0
index b651b857e03..02c00e10748 100644
@@ -9,5 +9,6 @@
 
 #define GL861_REQ_I2C_WRITE	0x01
 #define GL861_REQ_I2C_READ	0x02
+#define GL861_REQ_I2C_RAW	0x03
 
 #endif
drivers/media/usb/dvb-usb/Kconfig +0 -6
index 2651ae27734..1990d1c975e 100644
@@ -312,12 +312,6 @@ config DVB_USB_DTV5100
 	help
 	  Say Y here to support the AME DTV-5100 USB2.0 DVB-T receiver.
 
-config DVB_USB_FRIIO
-	tristate "Friio ISDB-T USB2.0 Receiver support"
-	depends on DVB_USB
-	help
-	  Say Y here to support the Japanese DTV receiver Friio.
-
 config DVB_USB_AZ6027
 	tristate "Azurewave DVB-S/S2 USB2.0 AZ6027 support"
 	depends on DVB_USB
drivers/media/usb/dvb-usb/Makefile +0 -3
index 9ad2618408e..407d90ca8be 100644
@@ -71,9 +71,6 @@ obj-$(CONFIG_DVB_USB_DTV5100) += dvb-usb-dtv5100.o
 dvb-usb-cinergyT2-objs := cinergyT2-core.o cinergyT2-fe.o
 obj-$(CONFIG_DVB_USB_CINERGY_T2) += dvb-usb-cinergyT2.o
 
-dvb-usb-friio-objs := friio.o friio-fe.o
-obj-$(CONFIG_DVB_USB_FRIIO) += dvb-usb-friio.o
-
 dvb-usb-az6027-objs := az6027.o
 obj-$(CONFIG_DVB_USB_AZ6027) += dvb-usb-az6027.o
 
drivers/media/usb/dvb-usb/friio-fe.c deleted +0 -441

441 lines not on this page · raw message

drivers/media/usb/dvb-usb/friio.c deleted +0 -522

522 lines not on this page · raw message

drivers/media/usb/dvb-usb/friio.h deleted +0 -99

99 lines not on this page · raw message

Signature · 1 line
2.16.3
#5 lore raw

PATCH v4 4/5 dvb-usb-v2/gl861: use usleep_range() for short delay

In reply to [email protected]

From: Akihiro Tsukada <[email protected]>

As the kernel doc "timers-howto.txt" reads,
short delay with msleep() can take much longer.
In a case of raspbery-pi platform where CONFIG_HZ_100 was set, it actually affected the init of Friio devices
since it issues lots of i2c transactions with short delay.

---
Changes since v3:
- none

 drivers/media/usb/dvb-usb-v2/gl861.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/usb/dvb-usb-v2/gl861.c +1 -1
index a0280126bfc..6f6dfa65bba 100644
@@ -45,7 +45,7 @@ static int gl861_i2c_msg(struct dvb_usb_device *d, u8 addr,
 		return -EINVAL;
 	}
 
-	msleep(1); /* avoid I2C errors */
+	usleep_range(1000, 2000); /* avoid I2C errors */
 
 	return usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0), req, type,
 			       value, index, rbuf, rlen, 2000);
Signature · 1 line
2.16.3
#6 lore raw

PATCH v4 5/5 dvb-usb-v2/gl861: ensure USB message buffers DMA'able

In reply to [email protected]

From: Akihiro Tsukada <[email protected]>

i2c message buf might be on stack.

---
Changes since v3:
- none

 drivers/media/usb/dvb-usb-v2/gl861.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)
drivers/media/usb/dvb-usb-v2/gl861.c +17 -3
index 6f6dfa65bba..a5c83b561a4 100644
@@ -22,6 +22,8 @@ static int gl861_i2c_msg(struct dvb_usb_device *d, u8 addr,
 	u16 value = addr << (8 + 1);
 	int wo = (rbuf == NULL || rlen == 0); /* write-only */
 	u8 req, type;
+	u8 *buf;
+	int ret;
 
 	if (wo) {
 		req = GL861_REQ_I2C_WRITE;
@@ -44,11 +46,23 @@ static int gl861_i2c_msg(struct dvb_usb_device *d, u8 addr,
 				KBUILD_MODNAME, wlen);
 		return -EINVAL;
 	}
-
+	buf = NULL;
+	if (rlen > 0) {
+		buf = kmalloc(rlen, GFP_KERNEL);
+		if (!buf)
+			return -ENOMEM;
+	}
 	usleep_range(1000, 2000); /* avoid I2C errors */
 
-	return usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0), req, type,
-			       value, index, rbuf, rlen, 2000);
+	ret = usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0), req, type,
+			      value, index, buf, rlen, 2000);
+	if (rlen > 0) {
+		if (ret > 0)
+			memcpy(rbuf, buf, rlen);
+		kfree(buf);
+	}
+
+	return ret;
 }
 
 /* Friio specific I2C read/write */
Signature · 1 line
2.16.3