Re: [PATCH v2 4/4] radio-si470x: add i2c driver for si470x

2009-07-30 Thread Tobias Lorenz
Hi,

okay for the moment. We can later think about optimizations, like return 0 
functions.
I have no possibility of testing this functionality. But I guess it works with 
your device, so

Acked-by: Tobias Lorenz tobias.lor...@gmx.net

Bye,
Toby

On Sunday 19 July 2009 16:19:24 Alexey Klimov wrote:
 Hello,
 
 On Tue, Jul 14, 2009 at 9:15 AM, Joonyoung Shimjy0922.s...@samsung.com 
 wrote:
  This patch supports i2c interface of si470x. The i2c specific part
  exists in radio-si470x-i2c.c file and the common part uses
  radio-si470x-common.c file. The '#if defined' is inserted inevitably
  because of parts used only si470x usb in the common file.
 
  The current driver version doesn't support the RDS.
 
  Signed-off-by: Joonyoung Shim jy0922.s...@samsung.com
  ---
   linux/drivers/media/radio/si470x/Kconfig   |   13 +
   linux/drivers/media/radio/si470x/Makefile  |2 +
   .../media/radio/si470x/radio-si470x-common.c   |6 +
   .../drivers/media/radio/si470x/radio-si470x-i2c.c  |  254 
  
   linux/drivers/media/radio/si470x/radio-si470x.h|6 +
   5 files changed, 281 insertions(+), 0 deletions(-)
   create mode 100644 linux/drivers/media/radio/si470x/radio-si470x-i2c.c
 
  diff --git a/linux/drivers/media/radio/si470x/Kconfig 
  b/linux/drivers/media/radio/si470x/Kconfig
  index 20d05c0..a466654 100644
  --- a/linux/drivers/media/radio/si470x/Kconfig
  +++ b/linux/drivers/media/radio/si470x/Kconfig
  @@ -22,3 +22,16 @@ config USB_SI470X
 
   To compile this driver as a module, choose M here: the
   module will be called radio-usb-si470x.
  +
  +config I2C_SI470X
  +   tristate Silicon Labs Si470x FM Radio Receiver support with I2C
  +   depends on I2C  RADIO_SI470X  !USB_SI470X
  +   ---help---
  + This is a driver for I2C devices with the Silicon Labs SI470x
  + chip.
  +
  + Say Y here if you want to connect this type of radio to your
  + computer's I2C port.
  +
  + To compile this driver as a module, choose M here: the
  + module will be called radio-i2c-si470x.
  diff --git a/linux/drivers/media/radio/si470x/Makefile 
  b/linux/drivers/media/radio/si470x/Makefile
  index 3cb777f..0696481 100644
  --- a/linux/drivers/media/radio/si470x/Makefile
  +++ b/linux/drivers/media/radio/si470x/Makefile
  @@ -3,5 +3,7 @@
   #
 
   radio-usb-si470x-objs  := radio-si470x-usb.o radio-si470x-common.o
  +radio-i2c-si470x-objs  := radio-si470x-i2c.o radio-si470x-common.o
 
   obj-$(CONFIG_USB_SI470X) += radio-usb-si470x.o
  +obj-$(CONFIG_I2C_SI470X) += radio-i2c-si470x.o
  diff --git a/linux/drivers/media/radio/si470x/radio-si470x-common.c 
  b/linux/drivers/media/radio/si470x/radio-si470x-common.c
  index 84cbea3..0a48159 100644
  --- a/linux/drivers/media/radio/si470x/radio-si470x-common.c
  +++ b/linux/drivers/media/radio/si470x/radio-si470x-common.c
  @@ -581,8 +581,12 @@ static int si470x_vidioc_g_tuner(struct file *file, 
  void *priv,
 /* driver constants */
 strcpy(tuner-name, FM);
 tuner-type = V4L2_TUNER_RADIO;
  +#if defined(CONFIG_USB_SI470X) || defined(CONFIG_USB_SI470X_MODULE)
 tuner-capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO |
 V4L2_TUNER_CAP_RDS;
  +#else
  +   tuner-capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO;
  +#endif
 
 /* range limits */
 switch ((radio-registers[SYSCONFIG2]  SYSCONFIG2_BAND)  6) {
  @@ -608,10 +612,12 @@ static int si470x_vidioc_g_tuner(struct file *file, 
  void *priv,
 tuner-rxsubchans = V4L2_TUNER_SUB_MONO;
 else
 tuner-rxsubchans = V4L2_TUNER_SUB_MONO | 
  V4L2_TUNER_SUB_STEREO;
  +#if defined(CONFIG_USB_SI470X) || defined(CONFIG_USB_SI470X_MODULE)
 /* If there is a reliable method of detecting an RDS channel,
then this code should check for that before setting this
RDS subchannel. */
 tuner-rxsubchans |= V4L2_TUNER_SUB_RDS;
  +#endif
 
 /* mono/stereo selector */
 if ((radio-registers[POWERCFG]  POWERCFG_MONO) == 0)
  diff --git a/linux/drivers/media/radio/si470x/radio-si470x-i2c.c 
  b/linux/drivers/media/radio/si470x/radio-si470x-i2c.c
  new file mode 100644
  index 000..2181021
  --- /dev/null
  +++ b/linux/drivers/media/radio/si470x/radio-si470x-i2c.c
  @@ -0,0 +1,254 @@
  +/*
  + * drivers/media/radio/si470x/radio-si470x-i2c.c
  + *
  + * I2C driver for radios with Silicon Labs Si470x FM Radio Receivers
  + *
  + * Copyright (C) 2009 Samsung Electronics Co.Ltd
  + * Author: Joonyoung Shim jy0922.s...@samsung.com
  + *
  + *  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.
  + *
  + *
  + * TODO:
  + * - RDS support
  + *
 

Re: [PATCH v2 4/4] radio-si470x: add i2c driver for si470x

2009-07-20 Thread Joonyoung Shim
snip

 +
 +int si470x_disconnect_check(struct si470x_device *radio)
 +{
 +   return 0;
 +}
 
 Looks like this function is empty and it's called few times. Is it
 good to make it inline?
 

Yes, this function is empty. It looks fine to me too.
I will modify it, thanks.
--
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 v2 4/4] radio-si470x: add i2c driver for si470x

2009-07-19 Thread Alexey Klimov
Hello,

On Tue, Jul 14, 2009 at 9:15 AM, Joonyoung Shimjy0922.s...@samsung.com wrote:
 This patch supports i2c interface of si470x. The i2c specific part
 exists in radio-si470x-i2c.c file and the common part uses
 radio-si470x-common.c file. The '#if defined' is inserted inevitably
 because of parts used only si470x usb in the common file.

 The current driver version doesn't support the RDS.

 Signed-off-by: Joonyoung Shim jy0922.s...@samsung.com
 ---
  linux/drivers/media/radio/si470x/Kconfig           |   13 +
  linux/drivers/media/radio/si470x/Makefile          |    2 +
  .../media/radio/si470x/radio-si470x-common.c       |    6 +
  .../drivers/media/radio/si470x/radio-si470x-i2c.c  |  254 
 
  linux/drivers/media/radio/si470x/radio-si470x.h    |    6 +
  5 files changed, 281 insertions(+), 0 deletions(-)
  create mode 100644 linux/drivers/media/radio/si470x/radio-si470x-i2c.c

 diff --git a/linux/drivers/media/radio/si470x/Kconfig 
 b/linux/drivers/media/radio/si470x/Kconfig
 index 20d05c0..a466654 100644
 --- a/linux/drivers/media/radio/si470x/Kconfig
 +++ b/linux/drivers/media/radio/si470x/Kconfig
 @@ -22,3 +22,16 @@ config USB_SI470X

          To compile this driver as a module, choose M here: the
          module will be called radio-usb-si470x.
 +
 +config I2C_SI470X
 +       tristate Silicon Labs Si470x FM Radio Receiver support with I2C
 +       depends on I2C  RADIO_SI470X  !USB_SI470X
 +       ---help---
 +         This is a driver for I2C devices with the Silicon Labs SI470x
 +         chip.
 +
 +         Say Y here if you want to connect this type of radio to your
 +         computer's I2C port.
 +
 +         To compile this driver as a module, choose M here: the
 +         module will be called radio-i2c-si470x.
 diff --git a/linux/drivers/media/radio/si470x/Makefile 
 b/linux/drivers/media/radio/si470x/Makefile
 index 3cb777f..0696481 100644
 --- a/linux/drivers/media/radio/si470x/Makefile
 +++ b/linux/drivers/media/radio/si470x/Makefile
 @@ -3,5 +3,7 @@
  #

  radio-usb-si470x-objs  := radio-si470x-usb.o radio-si470x-common.o
 +radio-i2c-si470x-objs  := radio-si470x-i2c.o radio-si470x-common.o

  obj-$(CONFIG_USB_SI470X) += radio-usb-si470x.o
 +obj-$(CONFIG_I2C_SI470X) += radio-i2c-si470x.o
 diff --git a/linux/drivers/media/radio/si470x/radio-si470x-common.c 
 b/linux/drivers/media/radio/si470x/radio-si470x-common.c
 index 84cbea3..0a48159 100644
 --- a/linux/drivers/media/radio/si470x/radio-si470x-common.c
 +++ b/linux/drivers/media/radio/si470x/radio-si470x-common.c
 @@ -581,8 +581,12 @@ static int si470x_vidioc_g_tuner(struct file *file, void 
 *priv,
        /* driver constants */
        strcpy(tuner-name, FM);
        tuner-type = V4L2_TUNER_RADIO;
 +#if defined(CONFIG_USB_SI470X) || defined(CONFIG_USB_SI470X_MODULE)
        tuner-capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO |
                            V4L2_TUNER_CAP_RDS;
 +#else
 +       tuner-capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO;
 +#endif

        /* range limits */
        switch ((radio-registers[SYSCONFIG2]  SYSCONFIG2_BAND)  6) {
 @@ -608,10 +612,12 @@ static int si470x_vidioc_g_tuner(struct file *file, 
 void *priv,
                tuner-rxsubchans = V4L2_TUNER_SUB_MONO;
        else
                tuner-rxsubchans = V4L2_TUNER_SUB_MONO | 
 V4L2_TUNER_SUB_STEREO;
 +#if defined(CONFIG_USB_SI470X) || defined(CONFIG_USB_SI470X_MODULE)
        /* If there is a reliable method of detecting an RDS channel,
           then this code should check for that before setting this
           RDS subchannel. */
        tuner-rxsubchans |= V4L2_TUNER_SUB_RDS;
 +#endif

        /* mono/stereo selector */
        if ((radio-registers[POWERCFG]  POWERCFG_MONO) == 0)
 diff --git a/linux/drivers/media/radio/si470x/radio-si470x-i2c.c 
 b/linux/drivers/media/radio/si470x/radio-si470x-i2c.c
 new file mode 100644
 index 000..2181021
 --- /dev/null
 +++ b/linux/drivers/media/radio/si470x/radio-si470x-i2c.c
 @@ -0,0 +1,254 @@
 +/*
 + * drivers/media/radio/si470x/radio-si470x-i2c.c
 + *
 + * I2C driver for radios with Silicon Labs Si470x FM Radio Receivers
 + *
 + * Copyright (C) 2009 Samsung Electronics Co.Ltd
 + * Author: Joonyoung Shim jy0922.s...@samsung.com
 + *
 + *  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.
 + *
 + *
 + * TODO:
 + * - RDS support
 + *
 + */
 +
 +#include linux/module.h
 +#include linux/init.h
 +#include linux/i2c.h
 +#include linux/delay.h
 +
 +#include radio-si470x.h
 +
 +#define DRIVER_KERNEL_VERSION  KERNEL_VERSION(1, 0, 0)
 +#define DRIVER_CARD            Silicon Labs Si470x FM Radio Receiver
 +#define DRIVER_VERSION         1.0.0
 +
 +/* starting with the upper byte of register 0x0a */
 +#define READ_REG_NUM           RADIO_REGISTER_NUM
 +#define 

[PATCH v2 4/4] radio-si470x: add i2c driver for si470x

2009-07-13 Thread Joonyoung Shim
This patch supports i2c interface of si470x. The i2c specific part
exists in radio-si470x-i2c.c file and the common part uses
radio-si470x-common.c file. The '#if defined' is inserted inevitably
because of parts used only si470x usb in the common file.

The current driver version doesn't support the RDS.

Signed-off-by: Joonyoung Shim jy0922.s...@samsung.com
---
 linux/drivers/media/radio/si470x/Kconfig   |   13 +
 linux/drivers/media/radio/si470x/Makefile  |2 +
 .../media/radio/si470x/radio-si470x-common.c   |6 +
 .../drivers/media/radio/si470x/radio-si470x-i2c.c  |  254 
 linux/drivers/media/radio/si470x/radio-si470x.h|6 +
 5 files changed, 281 insertions(+), 0 deletions(-)
 create mode 100644 linux/drivers/media/radio/si470x/radio-si470x-i2c.c

diff --git a/linux/drivers/media/radio/si470x/Kconfig 
b/linux/drivers/media/radio/si470x/Kconfig
index 20d05c0..a466654 100644
--- a/linux/drivers/media/radio/si470x/Kconfig
+++ b/linux/drivers/media/radio/si470x/Kconfig
@@ -22,3 +22,16 @@ config USB_SI470X
 
  To compile this driver as a module, choose M here: the
  module will be called radio-usb-si470x.
+
+config I2C_SI470X
+   tristate Silicon Labs Si470x FM Radio Receiver support with I2C
+   depends on I2C  RADIO_SI470X  !USB_SI470X
+   ---help---
+ This is a driver for I2C devices with the Silicon Labs SI470x
+ chip.
+
+ Say Y here if you want to connect this type of radio to your
+ computer's I2C port.
+
+ To compile this driver as a module, choose M here: the
+ module will be called radio-i2c-si470x.
diff --git a/linux/drivers/media/radio/si470x/Makefile 
b/linux/drivers/media/radio/si470x/Makefile
index 3cb777f..0696481 100644
--- a/linux/drivers/media/radio/si470x/Makefile
+++ b/linux/drivers/media/radio/si470x/Makefile
@@ -3,5 +3,7 @@
 #
 
 radio-usb-si470x-objs  := radio-si470x-usb.o radio-si470x-common.o
+radio-i2c-si470x-objs  := radio-si470x-i2c.o radio-si470x-common.o
 
 obj-$(CONFIG_USB_SI470X) += radio-usb-si470x.o
+obj-$(CONFIG_I2C_SI470X) += radio-i2c-si470x.o
diff --git a/linux/drivers/media/radio/si470x/radio-si470x-common.c 
b/linux/drivers/media/radio/si470x/radio-si470x-common.c
index 84cbea3..0a48159 100644
--- a/linux/drivers/media/radio/si470x/radio-si470x-common.c
+++ b/linux/drivers/media/radio/si470x/radio-si470x-common.c
@@ -581,8 +581,12 @@ static int si470x_vidioc_g_tuner(struct file *file, void 
*priv,
/* driver constants */
strcpy(tuner-name, FM);
tuner-type = V4L2_TUNER_RADIO;
+#if defined(CONFIG_USB_SI470X) || defined(CONFIG_USB_SI470X_MODULE)
tuner-capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO |
V4L2_TUNER_CAP_RDS;
+#else
+   tuner-capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO;
+#endif
 
/* range limits */
switch ((radio-registers[SYSCONFIG2]  SYSCONFIG2_BAND)  6) {
@@ -608,10 +612,12 @@ static int si470x_vidioc_g_tuner(struct file *file, void 
*priv,
tuner-rxsubchans = V4L2_TUNER_SUB_MONO;
else
tuner-rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO;
+#if defined(CONFIG_USB_SI470X) || defined(CONFIG_USB_SI470X_MODULE)
/* If there is a reliable method of detecting an RDS channel,
   then this code should check for that before setting this
   RDS subchannel. */
tuner-rxsubchans |= V4L2_TUNER_SUB_RDS;
+#endif
 
/* mono/stereo selector */
if ((radio-registers[POWERCFG]  POWERCFG_MONO) == 0)
diff --git a/linux/drivers/media/radio/si470x/radio-si470x-i2c.c 
b/linux/drivers/media/radio/si470x/radio-si470x-i2c.c
new file mode 100644
index 000..2181021
--- /dev/null
+++ b/linux/drivers/media/radio/si470x/radio-si470x-i2c.c
@@ -0,0 +1,254 @@
+/*
+ * drivers/media/radio/si470x/radio-si470x-i2c.c
+ *
+ * I2C driver for radios with Silicon Labs Si470x FM Radio Receivers
+ *
+ * Copyright (C) 2009 Samsung Electronics Co.Ltd
+ * Author: Joonyoung Shim jy0922.s...@samsung.com
+ *
+ *  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.
+ *
+ *
+ * TODO:
+ * - RDS support
+ *
+ */
+
+#include linux/module.h
+#include linux/init.h
+#include linux/i2c.h
+#include linux/delay.h
+
+#include radio-si470x.h
+
+#define DRIVER_KERNEL_VERSION  KERNEL_VERSION(1, 0, 0)
+#define DRIVER_CARDSilicon Labs Si470x FM Radio Receiver
+#define DRIVER_VERSION 1.0.0
+
+/* starting with the upper byte of register 0x0a */
+#define READ_REG_NUM   RADIO_REGISTER_NUM
+#define READ_INDEX(i)  ((i + RADIO_REGISTER_NUM - 0x0a) % READ_REG_NUM)
+
+static int si470x_get_all_registers(struct si470x_device *radio)
+{
+   int i;
+   u16