Re: [PATCH 1/3] m88brs2000 DVB-S frontend and tuner module.

2012-01-27 Thread Malcolm Priestley
On Thu, 2012-01-26 at 14:56 -0200, Mauro Carvalho Chehab wrote:
> Em 22-01-2012 08:38, Malcolm Priestley escreveu:
> > Support for m88brs2000 chip used in lmedm04 driver.
> > 
> > Note there are still lock problems.
> > 
> > Slow channel change due to the large block of registers sent in 
> > set_frontend.
> > 
> > Signed-off-by: Malcolm Priestley 
> > ---
> 
> ...
> > +static int m88rs2000_set_property(struct dvb_frontend *fe,
> > +   struct dtv_property *p)
> > +{
> > +   dprintk("%s(..)\n", __func__);
> > +   return 0;
> > +}
> > +
> > +static int m88rs2000_get_property(struct dvb_frontend *fe,
> > +   struct dtv_property *p)
> > +{
> > +   dprintk("%s(..)\n", __func__);
> > +   return 0;
> > +}
> ...
> 
> Just don't implement set_property/get_property if you're not using them.
> 
> Except for that, the code looks ok on my eyes.
> 
Hi Mauro

This patch series is now on alpha due to hardware issues.

The hardware becomes completely unresponsive after a full transponder
scan on all systems.

Although, the hardware becomes fully usable again after a few days!?!

Some kind of memory storage?

So, for the time being this driver is not to go upstream.

Regards


Malcolm

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] m88brs2000 DVB-S frontend and tuner module.

2012-01-26 Thread Mauro Carvalho Chehab
Em 22-01-2012 08:38, Malcolm Priestley escreveu:
> Support for m88brs2000 chip used in lmedm04 driver.
> 
> Note there are still lock problems.
> 
> Slow channel change due to the large block of registers sent in set_frontend.
> 
> Signed-off-by: Malcolm Priestley 
> ---

...
> +static int m88rs2000_set_property(struct dvb_frontend *fe,
> + struct dtv_property *p)
> +{
> + dprintk("%s(..)\n", __func__);
> + return 0;
> +}
> +
> +static int m88rs2000_get_property(struct dvb_frontend *fe,
> + struct dtv_property *p)
> +{
> + dprintk("%s(..)\n", __func__);
> + return 0;
> +}
...

Just don't implement set_property/get_property if you're not using them.

Except for that, the code looks ok on my eyes.

Regards,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/3] m88brs2000 DVB-S frontend and tuner module.

2012-01-22 Thread Malcolm Priestley
Support for m88brs2000 chip used in lmedm04 driver.

Note there are still lock problems.

Slow channel change due to the large block of registers sent in set_frontend.

Signed-off-by: Malcolm Priestley 
---
 drivers/media/dvb/frontends/Kconfig |7 +
 drivers/media/dvb/frontends/Makefile|1 +
 drivers/media/dvb/frontends/m88rs2000.c |  867 +++
 drivers/media/dvb/frontends/m88rs2000.h |   57 ++
 4 files changed, 932 insertions(+), 0 deletions(-)
 create mode 100644 drivers/media/dvb/frontends/m88rs2000.c
 create mode 100644 drivers/media/dvb/frontends/m88rs2000.h

diff --git a/drivers/media/dvb/frontends/Kconfig 
b/drivers/media/dvb/frontends/Kconfig
index ebb5ed7..fe6bcce 100644
--- a/drivers/media/dvb/frontends/Kconfig
+++ b/drivers/media/dvb/frontends/Kconfig
@@ -698,6 +698,13 @@ config DVB_IT913X_FE
  A DVB-T tuner module.
  Say Y when you want to support this frontend.
 
+config DVB_M88RS2000
+   tristate "M88RS2000 DVB-S"
+   depends on DVB_CORE && I2C
+   default m if DVB_FE_CUSTOMISE
+   help
+ A DVB-S tuner module. Say Y when you want to support this frontend.
+
 comment "Tools to develop new frontends"
 
 config DVB_DUMMY_FE
diff --git a/drivers/media/dvb/frontends/Makefile 
b/drivers/media/dvb/frontends/Makefile
index 00a2063..642c805 100644
--- a/drivers/media/dvb/frontends/Makefile
+++ b/drivers/media/dvb/frontends/Makefile
@@ -96,4 +96,5 @@ obj-$(CONFIG_DVB_TDA18271C2DD) += tda18271c2dd.o
 obj-$(CONFIG_DVB_IT913X_FE) += it913x-fe.o
 obj-$(CONFIG_DVB_A8293) += a8293.o
 obj-$(CONFIG_DVB_TDA10071) += tda10071.o
+obj-$(CONFIG_DVB_M88RS2000) += m88rs2000.o
 
diff --git a/drivers/media/dvb/frontends/m88rs2000.c 
b/drivers/media/dvb/frontends/m88rs2000.c
new file mode 100644
index 000..a614ffe
--- /dev/null
+++ b/drivers/media/dvb/frontends/m88rs2000.c
@@ -0,0 +1,867 @@
+/*
+   Driver for M88RS2000 demodulator and tuner
+
+   Copyright (C) 2012 Malcolm Priestley (tvbox...@gmail.com)
+
+   Beta Driver
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+
+#include "dvb_frontend.h"
+#include "m88rs2000.h"
+
+struct m88rs2000_state {
+   struct i2c_adapter *i2c;
+   const struct m88rs2000_config *config;
+   struct dvb_frontend frontend;
+   u8 no_lock_count;
+   u32 tuner_frequency;
+   u32 symbol_rate;
+   fe_code_rate_t fec_inner;
+   u8 tuner_level;
+   int errmode;
+};
+
+static int debug;
+#define dprintk(args...) \
+   do { \
+   if (debug) \
+   printk(KERN_DEBUG "m88rs2000: " args); \
+   } while (0)
+
+
+static int m88rs2000_writereg(struct m88rs2000_state *state, u8 tuner,
+   u8 reg, u8 data)
+{
+   int ret;
+   u8 addr = (tuner == 0) ? state->config->tuner_addr :
+   state->config->demod_addr;
+   u8 buf[] = { reg, data };
+   struct i2c_msg msg = {
+   .addr = addr,
+   .flags = 0,
+   .buf = buf,
+   .len = 2
+   };
+
+   ret = i2c_transfer(state->i2c, &msg, 1);
+
+   if (ret != 1)
+   dprintk("%s: writereg error (reg == 0x%02x, val == 0x%02x, "
+   "ret == %i)\n", __func__, reg, data, ret);
+
+   return (ret != 1) ? -EREMOTEIO : 0;
+}
+
+static int m88rs2000_demod_write(struct m88rs2000_state *state, u8 reg, u8 
data)
+{
+   return m88rs2000_writereg(state, 1, reg, data);
+}
+
+static int m88rs2000_tuner_write(struct m88rs2000_state *state, u8 reg, u8 
data)
+{
+   m88rs2000_demod_write(state, 0x81, 0x84);
+   return m88rs2000_writereg(state, 0, reg, data);
+}
+
+static int m88rs2000_write(struct dvb_frontend *fe, const u8 buf[], int len)
+{
+   struct m88rs2000_state *state = fe->demodulator_priv;
+
+   if (len != 2)
+   return -EINVAL;
+
+   return m88rs2000_writereg(state, 1, buf[0], buf[1]);
+}
+
+static u8 m88rs2000_readreg(struct m88rs2000_state *state, u8 tuner, u8 reg)
+{
+   int ret;
+   u8 b0[] = { reg };
+   u8 b1[] = { 0 };
+   u8 addr = (tuner == 0) ? state->config->tuner_addr :
+   state->config->demod_addr;
+   struct i2c_msg msg[] = {
+