* [PATCH] af9035: Add fc0011 tuner support
@ 2012-04-02 16:18 Michael Büsch
2012-04-02 17:03 ` Antti Palosaari
0 siblings, 1 reply; 3+ messages in thread
From: Michael Büsch @ 2012-04-02 16:18 UTC (permalink / raw)
To: Antti Palosaari; +Cc: linux-media
[-- Attachment #1: Type: text/plain, Size: 6295 bytes --]
This adds Fitipower fc0011 tuner support to the af9035 driver.
Signed-off-by: Michael Buesch <m@bues.ch>
---
Index: linux/drivers/media/dvb/dvb-usb/af9035.c
===================================================================
--- linux.orig/drivers/media/dvb/dvb-usb/af9035.c 2012-04-02 18:11:09.975605484 +0200
+++ linux/drivers/media/dvb/dvb-usb/af9035.c 2012-04-02 18:15:46.946952566 +0200
@@ -22,6 +22,7 @@
#include "af9035.h"
#include "af9033.h"
#include "tua9001.h"
+#include "fc0011.h"
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
static DEFINE_MUTEX(af9035_usb_mutex);
@@ -498,6 +499,7 @@
switch (tmp) {
case AF9033_TUNER_TUA9001:
+ case AF9033_TUNER_FC0011:
af9035_af9033_config[i].spec_inv = 1;
break;
default:
@@ -542,6 +544,83 @@
return ret;
}
+static int af9035_fc0011_tuner_callback(struct dvb_usb_device *d,
+ int cmd, int arg)
+{
+ int err;
+
+ switch (cmd) {
+ case FC0011_FE_CALLBACK_POWER:
+ /* Tuner enable */
+ err = af9035_wr_reg_mask(d, 0xd8eb, 1, 1);
+ if (err)
+ return err;
+ err = af9035_wr_reg_mask(d, 0xd8ec, 1, 1);
+ if (err)
+ return err;
+ err = af9035_wr_reg_mask(d, 0xd8ed, 1, 1);
+ if (err)
+ return err;
+ /* LED */
+ err = af9035_wr_reg_mask(d, 0xd8d0, 1, 1);
+ if (err)
+ return err;
+ err = af9035_wr_reg_mask(d, 0xd8d1, 1, 1);
+ if (err)
+ return err;
+ msleep(10);
+ break;
+ case FC0011_FE_CALLBACK_RESET:
+ err = af9035_wr_reg(d, 0xd8e9, 1);
+ if (err)
+ return err;
+ err = af9035_wr_reg(d, 0xd8e8, 1);
+ if (err)
+ return err;
+ err = af9035_wr_reg(d, 0xd8e7, 1);
+ if (err)
+ return err;
+ msleep(10);
+ err = af9035_wr_reg(d, 0xd8e7, 0);
+ if (err)
+ return err;
+ msleep(10);
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int af9035_tuner_callback(struct dvb_usb_device *d, int cmd, int arg)
+{
+ switch (af9035_af9033_config[0].tuner) {
+ case AF9033_TUNER_FC0011:
+ return af9035_fc0011_tuner_callback(d, cmd, arg);
+ default:
+ break;
+ }
+
+ return -ENODEV;
+}
+
+static int af9035_frontend_callback(void *adapter_priv, int component,
+ int cmd, int arg)
+{
+ struct i2c_adapter *adap = adapter_priv;
+ struct dvb_usb_device *d = i2c_get_adapdata(adap);
+
+ switch (component) {
+ case DVB_FRONTEND_COMPONENT_TUNER:
+ return af9035_tuner_callback(d, cmd, arg);
+ default:
+ break;
+ }
+
+ return -EINVAL;
+}
+
static int af9035_frontend_attach(struct dvb_usb_adapter *adap)
{
int ret;
@@ -570,6 +649,7 @@
ret = -ENODEV;
goto err;
}
+ adap->fe_adap[0].fe->callback = af9035_frontend_callback;
return 0;
@@ -583,6 +663,10 @@
.i2c_addr = 0x60,
};
+static const struct fc0011_config af9035_fc0011_config = {
+ .i2c_address = 0x60,
+};
+
static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
{
int ret;
@@ -631,6 +715,10 @@
fe = dvb_attach(tua9001_attach, adap->fe_adap[0].fe,
&adap->dev->i2c_adap, &af9035_tua9001_config);
break;
+ case AF9033_TUNER_FC0011:
+ fe = dvb_attach(fc0011_attach, adap->fe_adap[0].fe,
+ &adap->dev->i2c_adap, &af9035_fc0011_config);
+ break;
default:
fe = NULL;
}
Index: linux/drivers/media/dvb/frontends/af9033.c
===================================================================
--- linux.orig/drivers/media/dvb/frontends/af9033.c 2012-04-02 18:11:08.551563486 +0200
+++ linux/drivers/media/dvb/frontends/af9033.c 2012-04-02 18:11:18.827865444 +0200
@@ -297,6 +297,10 @@
len = ARRAY_SIZE(tuner_init_tua9001);
init = tuner_init_tua9001;
break;
+ case AF9033_TUNER_FC0011:
+ len = ARRAY_SIZE(tuner_init_fc0011);
+ init = tuner_init_fc0011;
+ break;
default:
pr_debug("%s: unsupported tuner ID=%d\n", __func__,
state->cfg.tuner);
Index: linux/drivers/media/dvb/frontends/af9033_priv.h
===================================================================
--- linux.orig/drivers/media/dvb/frontends/af9033_priv.h 2012-04-02 18:11:08.551563486 +0200
+++ linux/drivers/media/dvb/frontends/af9033_priv.h 2012-04-02 18:11:18.827865444 +0200
@@ -336,5 +336,66 @@
{ 0x80f1e6, 0x00 },
};
+/* Fitipower fc0011 tuner init
+ AF9033_TUNER_FC0011 = 0x28 */
+static const struct reg_val tuner_init_fc0011[] = {
+ { 0x800046, AF9033_TUNER_FC0011 },
+ { 0x800057, 0x00 },
+ { 0x800058, 0x01 },
+ { 0x80005f, 0x00 },
+ { 0x800060, 0x00 },
+ { 0x800068, 0xa5 },
+ { 0x80006e, 0x01 },
+ { 0x800071, 0x0A },
+ { 0x800072, 0x02 },
+ { 0x800074, 0x01 },
+ { 0x800079, 0x01 },
+ { 0x800093, 0x00 },
+ { 0x800094, 0x00 },
+ { 0x800095, 0x00 },
+ { 0x800096, 0x00 },
+ { 0x80009b, 0x2D },
+ { 0x80009c, 0x60 },
+ { 0x80009d, 0x23 },
+ { 0x8000a4, 0x50 },
+ { 0x8000ad, 0x50 },
+ { 0x8000b3, 0x01 },
+ { 0x8000b7, 0x88 },
+ { 0x8000b8, 0xa6 },
+ { 0x8000c3, 0x01 },
+ { 0x8000c4, 0x01 },
+ { 0x8000c7, 0x69 },
+ { 0x80F007, 0x00 },
+ { 0x80F00A, 0x1B },
+ { 0x80F00B, 0x1B },
+ { 0x80F00C, 0x1B },
+ { 0x80F00D, 0x1B },
+ { 0x80F00E, 0xFF },
+ { 0x80F00F, 0x01 },
+ { 0x80F010, 0x00 },
+ { 0x80F011, 0x02 },
+ { 0x80F012, 0xFF },
+ { 0x80F013, 0x01 },
+ { 0x80F014, 0x00 },
+ { 0x80F015, 0x02 },
+ { 0x80F01B, 0xEF },
+ { 0x80F01C, 0x01 },
+ { 0x80F01D, 0x0f },
+ { 0x80F01E, 0x02 },
+ { 0x80F01F, 0x6E },
+ { 0x80F020, 0x00 },
+ { 0x80F025, 0xDE },
+ { 0x80F026, 0x00 },
+ { 0x80F027, 0x0A },
+ { 0x80F028, 0x03 },
+ { 0x80F029, 0x6E },
+ { 0x80F02A, 0x00 },
+ { 0x80F047, 0x00 },
+ { 0x80F054, 0x00 },
+ { 0x80F055, 0x00 },
+ { 0x80F077, 0x01 },
+ { 0x80F1E6, 0x00 },
+};
+
#endif /* AF9033_PRIV_H */
Index: linux/drivers/media/dvb/dvb-usb/Kconfig
===================================================================
--- linux.orig/drivers/media/dvb/dvb-usb/Kconfig 2012-04-01 11:41:29.090353449 +0200
+++ linux/drivers/media/dvb/dvb-usb/Kconfig 2012-04-02 18:16:32.460019436 +0200
@@ -428,6 +428,7 @@
depends on DVB_USB
select DVB_AF9033
select MEDIA_TUNER_TUA9001 if !MEDIA_TUNER_CUSTOMISE
+ select MEDIA_TUNER_FC0011 if !MEDIA_TUNER_CUSTOMISE
help
Say Y here to support the Afatech AF9035 based DVB USB receiver.
--
Greetings, Michael.
PGP encryption is encouraged / 908D8B0E
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] af9035: Add fc0011 tuner support
2012-04-02 16:18 [PATCH] af9035: Add fc0011 tuner support Michael Büsch
@ 2012-04-02 17:03 ` Antti Palosaari
2012-04-02 17:24 ` Michael Büsch
0 siblings, 1 reply; 3+ messages in thread
From: Antti Palosaari @ 2012-04-02 17:03 UTC (permalink / raw)
To: Michael Büsch; +Cc: linux-media
On 02.04.2012 19:18, Michael Büsch wrote:
> This adds Fitipower fc0011 tuner support to the af9035 driver.
>
> Signed-off-by: Michael Buesch<m@bues.ch>
Applied, thanks!
http://git.linuxtv.org/anttip/media_tree.git/shortlog/refs/heads/af9035_experimental
And same checkpatch.pl issue here.
You can ran checkpatch like that:
git diff | ./scripts/checkpatch.pl -
git diff --cached | ./scripts/checkpatch.pl -
./scripts/checkpatch.pl --file drivers/media/dvb/dvb-usb/af9035.c
For that driver it complains you are using wrong sleep (msleep(10)).
Correct sleep for that case is something like usleep_range(10000,
100000); which means as sleep at least 10ms but it does not matter if
you sleep even 100ms. The wider range the better chance for Kernel to
optimize power saving. There was usleep_range() already used inside that
module.
regards
Antti
--
http://palosaari.fi/
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] af9035: Add fc0011 tuner support
2012-04-02 17:03 ` Antti Palosaari
@ 2012-04-02 17:24 ` Michael Büsch
0 siblings, 0 replies; 3+ messages in thread
From: Michael Büsch @ 2012-04-02 17:24 UTC (permalink / raw)
To: Antti Palosaari; +Cc: linux-media
[-- Attachment #1: Type: text/plain, Size: 1192 bytes --]
On Mon, 02 Apr 2012 20:03:08 +0300
Antti Palosaari <crope@iki.fi> wrote:
> On 02.04.2012 19:18, Michael Büsch wrote:
> > This adds Fitipower fc0011 tuner support to the af9035 driver.
> >
> > Signed-off-by: Michael Buesch<m@bues.ch>
>
> Applied, thanks!
> http://git.linuxtv.org/anttip/media_tree.git/shortlog/refs/heads/af9035_experimental
>
> And same checkpatch.pl issue here.
> You can ran checkpatch like that:
> git diff | ./scripts/checkpatch.pl -
> git diff --cached | ./scripts/checkpatch.pl -
> ./scripts/checkpatch.pl --file drivers/media/dvb/dvb-usb/af9035.c
>
> For that driver it complains you are using wrong sleep (msleep(10)).
> Correct sleep for that case is something like usleep_range(10000,
> 100000); which means as sleep at least 10ms but it does not matter if
> you sleep even 100ms. The wider range the better chance for Kernel to
> optimize power saving. There was usleep_range() already used inside that
> module.
Ok, the sleep warning is the only remotely sane checkpatch warning for these
patches. So I will send a separate patch to convert those sleeps.
--
Greetings, Michael.
PGP encryption is encouraged / 908D8B0E
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-04-02 17:24 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-02 16:18 [PATCH] af9035: Add fc0011 tuner support Michael Büsch
2012-04-02 17:03 ` Antti Palosaari
2012-04-02 17:24 ` Michael Büsch
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).