summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2007-09-13 16:21:51 +0200
committerHans Verkuil <hverkuil@xs4all.nl>2007-09-13 16:21:51 +0200
commitacd79c943b2564edc9ae1752174da3897f84eac0 (patch)
treebc21c36c3e1971bf7fde816d1063de6663546699 /linux/drivers/media/video
parent4d368aaf926955adb0448c712f07327e0b16a662 (diff)
downloadmediapointer-dvb-s2-acd79c943b2564edc9ae1752174da3897f84eac0.tar.gz
mediapointer-dvb-s2-acd79c943b2564edc9ae1752174da3897f84eac0.tar.bz2
saa7127: convert to bus-based I2C API.
From: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org> --- linux/drivers/media/video/saa7127.c | 109 ++++-------------------------------- 1 file changed, 13 insertions(+), 96 deletions(-)
Diffstat (limited to 'linux/drivers/media/video')
-rw-r--r--linux/drivers/media/video/saa7127.c109
1 files changed, 13 insertions, 96 deletions
diff --git a/linux/drivers/media/video/saa7127.c b/linux/drivers/media/video/saa7127.c
index 17c3078c3..95e0f998a 100644
--- a/linux/drivers/media/video/saa7127.c
+++ b/linux/drivers/media/video/saa7127.c
@@ -55,6 +55,7 @@
#include <linux/videodev2.h>
#include <media/v4l2-common.h>
#include <media/v4l2-chip-ident.h>
+#include <media/v4l2-i2c-drv-legacy.h>
#include <media/saa7127.h>
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
#include "i2c-compat.h"
@@ -674,39 +675,19 @@ static int saa7127_command(struct i2c_client *client,
/* ----------------------------------------------------------------------- */
-static struct i2c_driver i2c_driver_saa7127;
-
-/* ----------------------------------------------------------------------- */
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-static int saa7127_attach(struct i2c_adapter *adapter, int address,
- unsigned short flags, int kind)
-#else
-static int saa7127_attach(struct i2c_adapter *adapter, int address, int kind)
-#endif
+static int saa7127_probe(struct i2c_client *client)
{
- struct i2c_client *client;
struct saa7127_state *state;
struct v4l2_sliced_vbi_data vbi = { 0, 0, 0, 0 }; /* set to disabled */
int read_result = 0;
/* Check if the adapter supports the needed features */
- if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
+ if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return 0;
- client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
- if (client == 0)
- return -ENOMEM;
-
- client->addr = address;
- client->adapter = adapter;
- client->driver = &i2c_driver_saa7127;
-#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,15)
- client->flags = I2C_CLIENT_ALLOW_USE;
-#endif
snprintf(client->name, sizeof(client->name) - 1, "saa7127");
- v4l_dbg(1, debug, client, "detecting saa7127 client on address 0x%x\n", address << 1);
+ v4l_dbg(1, debug, client, "detecting saa7127 client on address 0x%x\n", client->addr << 1);
/* First test register 0: Bits 5-7 are a version ID (should be 0),
and bit 2 should also be 0.
@@ -716,13 +697,11 @@ static int saa7127_attach(struct i2c_adapter *adapter, int address, int kind)
if ((saa7127_read(client, 0) & 0xe4) != 0 ||
(saa7127_read(client, 0x29) & 0x3f) != 0x1d) {
v4l_dbg(1, debug, client, "saa7127 not found\n");
- kfree(client);
return 0;
}
state = kzalloc(sizeof(struct saa7127_state), GFP_KERNEL);
if (state == NULL) {
- kfree(client);
return (-ENOMEM);
}
@@ -751,99 +730,37 @@ static int saa7127_attach(struct i2c_adapter *adapter, int address, int kind)
read_result = saa7127_read(client, SAA7129_REG_FADE_KEY_COL2);
saa7127_write(client, SAA7129_REG_FADE_KEY_COL2, 0xaa);
if (saa7127_read(client, SAA7129_REG_FADE_KEY_COL2) == 0xaa) {
- v4l_info(client, "saa7129 found @ 0x%x (%s)\n", address << 1, adapter->name);
+ v4l_info(client, "saa7129 found @ 0x%x (%s)\n", client->addr << 1, client->adapter->name);
saa7127_write(client, SAA7129_REG_FADE_KEY_COL2, read_result);
saa7127_write_inittab(client, saa7129_init_config_extra);
state->ident = V4L2_IDENT_SAA7129;
} else {
- v4l_info(client, "saa7127 found @ 0x%x (%s)\n", address << 1, adapter->name);
+ v4l_info(client, "saa7127 found @ 0x%x (%s)\n", client->addr << 1, client->adapter->name);
state->ident = V4L2_IDENT_SAA7127;
}
-
- i2c_attach_client(client);
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- MOD_INC_USE_COUNT;
-#endif
return 0;
}
/* ----------------------------------------------------------------------- */
-static int saa7127_probe(struct i2c_adapter *adapter)
+static int saa7127_remove(struct i2c_client *client)
{
-#ifdef I2C_CLASS_TV_ANALOG
- if (adapter->class & I2C_CLASS_TV_ANALOG)
-#else
- if (adapter->id == I2C_HW_B_BT848)
-#endif
- return i2c_probe(adapter, &addr_data, saa7127_attach);
- return 0;
-}
-
-/* ----------------------------------------------------------------------- */
-
-static int saa7127_detach(struct i2c_client *client)
-{
- struct saa7127_state *state = i2c_get_clientdata(client);
- int err;
-
/* Turn off TV output */
saa7127_set_video_enable(client, 0);
-
- err = i2c_detach_client(client);
-
- if (err) {
- return err;
- }
-
- kfree(state);
- kfree(client);
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- MOD_DEC_USE_COUNT;
-#endif
+ kfree(i2c_get_clientdata(client));
return 0;
}
/* ----------------------------------------------------------------------- */
-static struct i2c_driver i2c_driver_saa7127 = {
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) && (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,15))
- .owner = THIS_MODULE,
-#endif
-#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,15)
+static struct v4l2_i2c_driver_data v4l2_i2c_data = {
.name = "saa7127",
- .flags = I2C_DF_NOTIFY,
-#else
- .driver = {
- .name = "saa7127",
- },
-#endif
- .id = I2C_DRIVERID_SAA7127,
- .attach_adapter = saa7127_probe,
- .detach_client = saa7127_detach,
+ .driverid = I2C_DRIVERID_SAA7127,
.command = saa7127_command,
+ .probe = saa7127_probe,
+ .remove = saa7127_remove,
};
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
EXPORT_NO_SYMBOLS;
#endif
-
-/* ----------------------------------------------------------------------- */
-
-static int __init saa7127_init_module(void)
-{
- return i2c_add_driver(&i2c_driver_saa7127);
-}
-
-/* ----------------------------------------------------------------------- */
-
-static void __exit saa7127_cleanup_module(void)
-{
- i2c_del_driver(&i2c_driver_saa7127);
-}
-
-/* ----------------------------------------------------------------------- */
-
-module_init(saa7127_init_module);
-module_exit(saa7127_cleanup_module);