Commit fe047de4 authored by Corentin Labbe's avatar Corentin Labbe Committed by Mauro Carvalho Chehab

media: staging: media: zoran: merge all modules

The zoran driver is split in many modules, but this lead to some
problems.
One of them is that load order is incorrect when everything is built-in.

Having more than one module is useless, so merge all zoran modules in
one.
Signed-off-by: default avatarCorentin Labbe <clabbe@baylibre.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 12b65d5c
...@@ -15,7 +15,7 @@ config VIDEO_ZORAN ...@@ -15,7 +15,7 @@ config VIDEO_ZORAN
module will be called zr36067. module will be called zr36067.
config VIDEO_ZORAN_DC30 config VIDEO_ZORAN_DC30
tristate "Pinnacle/Miro DC30(+) support" bool "Pinnacle/Miro DC30(+) support"
depends on VIDEO_ZORAN depends on VIDEO_ZORAN
select VIDEO_ADV7175 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_ADV7175 if MEDIA_SUBDRV_AUTOSELECT
select VIDEO_VPX3220 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_VPX3220 if MEDIA_SUBDRV_AUTOSELECT
...@@ -25,7 +25,7 @@ config VIDEO_ZORAN_DC30 ...@@ -25,7 +25,7 @@ config VIDEO_ZORAN_DC30
zr36050 MJPEG codec and zr36016 VFE. zr36050 MJPEG codec and zr36016 VFE.
config VIDEO_ZORAN_ZR36060 config VIDEO_ZORAN_ZR36060
tristate "Zoran ZR36060" bool "Zoran ZR36060"
depends on VIDEO_ZORAN depends on VIDEO_ZORAN
help help
Say Y to support Zoran boards based on 36060 chips. Say Y to support Zoran boards based on 36060 chips.
...@@ -33,7 +33,7 @@ config VIDEO_ZORAN_ZR36060 ...@@ -33,7 +33,7 @@ config VIDEO_ZORAN_ZR36060
and 33 R10 and AverMedia 6 boards. and 33 R10 and AverMedia 6 boards.
config VIDEO_ZORAN_BUZ config VIDEO_ZORAN_BUZ
tristate "Iomega Buz support" bool "Iomega Buz support"
depends on VIDEO_ZORAN_ZR36060 depends on VIDEO_ZORAN_ZR36060
select VIDEO_SAA711X if MEDIA_SUBDRV_AUTOSELECT select VIDEO_SAA711X if MEDIA_SUBDRV_AUTOSELECT
select VIDEO_SAA7185 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_SAA7185 if MEDIA_SUBDRV_AUTOSELECT
...@@ -41,7 +41,7 @@ config VIDEO_ZORAN_BUZ ...@@ -41,7 +41,7 @@ config VIDEO_ZORAN_BUZ
Support for the Iomega Buz MJPEG capture/playback card. Support for the Iomega Buz MJPEG capture/playback card.
config VIDEO_ZORAN_DC10 config VIDEO_ZORAN_DC10
tristate "Pinnacle/Miro DC10(+) support" bool "Pinnacle/Miro DC10(+) support"
depends on VIDEO_ZORAN_ZR36060 depends on VIDEO_ZORAN_ZR36060
select VIDEO_SAA7110 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_SAA7110 if MEDIA_SUBDRV_AUTOSELECT
select VIDEO_ADV7175 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_ADV7175 if MEDIA_SUBDRV_AUTOSELECT
...@@ -50,7 +50,7 @@ config VIDEO_ZORAN_DC10 ...@@ -50,7 +50,7 @@ config VIDEO_ZORAN_DC10
card. card.
config VIDEO_ZORAN_LML33 config VIDEO_ZORAN_LML33
tristate "Linux Media Labs LML33 support" bool "Linux Media Labs LML33 support"
depends on VIDEO_ZORAN_ZR36060 depends on VIDEO_ZORAN_ZR36060
select VIDEO_BT819 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_BT819 if MEDIA_SUBDRV_AUTOSELECT
select VIDEO_BT856 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_BT856 if MEDIA_SUBDRV_AUTOSELECT
...@@ -59,7 +59,7 @@ config VIDEO_ZORAN_LML33 ...@@ -59,7 +59,7 @@ config VIDEO_ZORAN_LML33
card. card.
config VIDEO_ZORAN_LML33R10 config VIDEO_ZORAN_LML33R10
tristate "Linux Media Labs LML33R10 support" bool "Linux Media Labs LML33R10 support"
depends on VIDEO_ZORAN_ZR36060 depends on VIDEO_ZORAN_ZR36060
select VIDEO_SAA711X if MEDIA_SUBDRV_AUTOSELECT select VIDEO_SAA711X if MEDIA_SUBDRV_AUTOSELECT
select VIDEO_ADV7170 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_ADV7170 if MEDIA_SUBDRV_AUTOSELECT
...@@ -68,7 +68,7 @@ config VIDEO_ZORAN_LML33R10 ...@@ -68,7 +68,7 @@ config VIDEO_ZORAN_LML33R10
card. card.
config VIDEO_ZORAN_AVS6EYES config VIDEO_ZORAN_AVS6EYES
tristate "AverMedia 6 Eyes support" bool "AverMedia 6 Eyes support"
depends on VIDEO_ZORAN_ZR36060 depends on VIDEO_ZORAN_ZR36060
select VIDEO_BT856 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_BT856 if MEDIA_SUBDRV_AUTOSELECT
select VIDEO_BT866 if MEDIA_SUBDRV_AUTOSELECT select VIDEO_BT866 if MEDIA_SUBDRV_AUTOSELECT
......
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
zr36067-objs := zoran_device.o \ zr36067-objs := zoran_device.o \
zoran_driver.o zoran_card.o zoran_driver.o zoran_card.o videocodec.o
obj-$(CONFIG_VIDEO_ZORAN) += zr36067.o videocodec.o obj-$(CONFIG_VIDEO_ZORAN) += zr36067.o
obj-$(CONFIG_VIDEO_ZORAN_DC30) += zr36050.o zr36016.o zr36067-$(CONFIG_VIDEO_ZORAN_DC30) += zr36050.o zr36016.o
obj-$(CONFIG_VIDEO_ZORAN_ZR36060) += zr36060.o zr36067-$(CONFIG_VIDEO_ZORAN_ZR36060) += zr36060.o
...@@ -8,8 +8,6 @@ ...@@ -8,8 +8,6 @@
* (c) 2002 Wolfgang Scherr <scherr@net4you.at> * (c) 2002 Wolfgang Scherr <scherr@net4you.at>
*/ */
#define VIDEOCODEC_VERSION "v0.2"
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -72,12 +70,9 @@ struct videocodec *videocodec_attach(struct videocodec_master *master) ...@@ -72,12 +70,9 @@ struct videocodec *videocodec_attach(struct videocodec_master *master)
if ((master->flags & h->codec->flags) == master->flags) { if ((master->flags & h->codec->flags) == master->flags) {
dprintk(4, "%s: try '%s'\n", __func__, h->codec->name); dprintk(4, "%s: try '%s'\n", __func__, h->codec->name);
if (!try_module_get(h->codec->owner))
return NULL;
codec = kmemdup(h->codec, sizeof(struct videocodec), GFP_KERNEL); codec = kmemdup(h->codec, sizeof(struct videocodec), GFP_KERNEL);
if (!codec) if (!codec)
goto out_module_put; goto out_kfree;
res = strlen(codec->name); res = strlen(codec->name);
snprintf(codec->name + res, sizeof(codec->name) - res, "[%d]", h->attached); snprintf(codec->name + res, sizeof(codec->name) - res, "[%d]", h->attached);
...@@ -113,13 +108,10 @@ struct videocodec *videocodec_attach(struct videocodec_master *master) ...@@ -113,13 +108,10 @@ struct videocodec *videocodec_attach(struct videocodec_master *master)
pr_err("%s: no codec found!\n", __func__); pr_err("%s: no codec found!\n", __func__);
return NULL; return NULL;
out_module_put:
module_put(h->codec->owner);
out_kfree: out_kfree:
kfree(codec); kfree(codec);
return NULL; return NULL;
} }
EXPORT_SYMBOL(videocodec_attach);
int videocodec_detach(struct videocodec *codec) int videocodec_detach(struct videocodec *codec)
{ {
...@@ -160,7 +152,6 @@ int videocodec_detach(struct videocodec *codec) ...@@ -160,7 +152,6 @@ int videocodec_detach(struct videocodec *codec)
prev->next = a->next; prev->next = a->next;
dprintk(4, "videocodec: delete middle\n"); dprintk(4, "videocodec: delete middle\n");
} }
module_put(a->codec->owner);
kfree(a->codec); kfree(a->codec);
kfree(a); kfree(a);
h->attached -= 1; h->attached -= 1;
...@@ -175,7 +166,6 @@ int videocodec_detach(struct videocodec *codec) ...@@ -175,7 +166,6 @@ int videocodec_detach(struct videocodec *codec)
pr_err("%s: given codec not found!\n", __func__); pr_err("%s: given codec not found!\n", __func__);
return -EINVAL; return -EINVAL;
} }
EXPORT_SYMBOL(videocodec_detach);
int videocodec_register(const struct videocodec *codec) int videocodec_register(const struct videocodec *codec)
{ {
...@@ -208,7 +198,6 @@ int videocodec_register(const struct videocodec *codec) ...@@ -208,7 +198,6 @@ int videocodec_register(const struct videocodec *codec)
return 0; return 0;
} }
EXPORT_SYMBOL(videocodec_register);
int videocodec_unregister(const struct videocodec *codec) int videocodec_unregister(const struct videocodec *codec)
{ {
...@@ -255,7 +244,6 @@ int videocodec_unregister(const struct videocodec *codec) ...@@ -255,7 +244,6 @@ int videocodec_unregister(const struct videocodec *codec)
pr_err("%s: given codec not found!\n", __func__); pr_err("%s: given codec not found!\n", __func__);
return -EINVAL; return -EINVAL;
} }
EXPORT_SYMBOL(videocodec_unregister);
int videocodec_debugfs_show(struct seq_file *m) int videocodec_debugfs_show(struct seq_file *m)
{ {
...@@ -284,25 +272,3 @@ int videocodec_debugfs_show(struct seq_file *m) ...@@ -284,25 +272,3 @@ int videocodec_debugfs_show(struct seq_file *m)
return 0; return 0;
} }
/* ===================== */
/* hook in driver module */
/* ===================== */
static int __init videocodec_init(void)
{
pr_info("Linux video codec intermediate layer: %s\n", VIDEOCODEC_VERSION);
return 0;
}
static void __exit videocodec_exit(void)
{
}
module_init(videocodec_init);
module_exit(videocodec_exit);
MODULE_AUTHOR("Wolfgang Scherr <scherr@net4you.at>");
MODULE_DESCRIPTION("Intermediate API module for video codecs "
VIDEOCODEC_VERSION);
MODULE_LICENSE("GPL");
...@@ -234,7 +234,6 @@ struct jpeg_app_marker { ...@@ -234,7 +234,6 @@ struct jpeg_app_marker {
}; };
struct videocodec { struct videocodec {
struct module *owner;
/* -- filled in by slave device during register -- */ /* -- filled in by slave device during register -- */
char name[32]; char name[32];
unsigned long magic; /* may be used for client<->master attaching */ unsigned long magic; /* may be used for client<->master attaching */
......
...@@ -29,6 +29,9 @@ ...@@ -29,6 +29,9 @@
#include "zoran.h" #include "zoran.h"
#include "zoran_card.h" #include "zoran_card.h"
#include "zoran_device.h" #include "zoran_device.h"
#include "zr36016.h"
#include "zr36050.h"
#include "zr36060.h"
extern const struct zoran_format zoran_formats[]; extern const struct zoran_format zoran_formats[];
...@@ -266,6 +269,96 @@ static const char *codecid_to_modulename(u16 codecid) ...@@ -266,6 +269,96 @@ static const char *codecid_to_modulename(u16 codecid)
return name; return name;
} }
static int codec_init(struct zoran *zr, u16 codecid)
{
switch (codecid) {
case CODEC_TYPE_ZR36060:
#ifdef CONFIG_VIDEO_ZORAN_ZR36060
return zr36060_init_module();
#else
pci_err(zr->pci_dev, "ZR36060 support is not enabled\n");
return -EINVAL;
#endif
break;
case CODEC_TYPE_ZR36050:
#ifdef CONFIG_VIDEO_ZORAN_DC30
return zr36050_init_module();
#else
pci_err(zr->pci_dev, "ZR36050 support is not enabled\n");
return -EINVAL;
#endif
break;
case CODEC_TYPE_ZR36016:
#ifdef CONFIG_VIDEO_ZORAN_DC30
return zr36016_init_module();
#else
pci_err(zr->pci_dev, "ZR36016 support is not enabled\n");
return -EINVAL;
#endif
break;
}
pci_err(zr->pci_dev, "unknown codec id %x\n", codecid);
return -EINVAL;
}
static void codec_exit(struct zoran *zr, u16 codecid)
{
switch (codecid) {
case CODEC_TYPE_ZR36060:
#ifdef CONFIG_VIDEO_ZORAN_ZR36060
zr36060_cleanup_module();
#endif
break;
case CODEC_TYPE_ZR36050:
#ifdef CONFIG_VIDEO_ZORAN_DC30
zr36050_cleanup_module();
#endif
break;
case CODEC_TYPE_ZR36016:
#ifdef CONFIG_VIDEO_ZORAN_DC30
zr36016_cleanup_module();
#endif
break;
}
}
static int videocodec_init(struct zoran *zr)
{
const char *codec_name, *vfe_name;
int result;
codec_name = codecid_to_modulename(zr->card.video_codec);
if (codec_name) {
result = codec_init(zr, zr->card.video_codec);
if (result < 0) {
pci_err(zr->pci_dev, "failed to load video codec %s: %d\n",
codec_name, result);
return result;
}
}
vfe_name = codecid_to_modulename(zr->card.video_vfe);
if (vfe_name) {
result = codec_init(zr, zr->card.video_vfe);
if (result < 0) {
pci_err(zr->pci_dev, "failed to load video vfe %s: %d\n",
vfe_name, result);
if (codec_name)
codec_exit(zr, zr->card.video_codec);
return result;
}
}
return 0;
}
static void videocodec_exit(struct zoran *zr)
{
if (zr->card.video_codec != CODEC_TYPE_NONE)
codec_exit(zr, zr->card.video_codec);
if (zr->card.video_vfe != CODEC_TYPE_NONE)
codec_exit(zr, zr->card.video_vfe);
}
// struct tvnorm { // struct tvnorm {
// u16 wt, wa, h_start, h_sync_start, ht, ha, v_start; // u16 wt, wa, h_start, h_sync_start, ht, ha, v_start;
// }; // };
...@@ -954,6 +1047,7 @@ static void zoran_remove(struct pci_dev *pdev) ...@@ -954,6 +1047,7 @@ static void zoran_remove(struct pci_dev *pdev)
videocodec_detach(zr->codec); videocodec_detach(zr->codec);
if (zr->vfe) if (zr->vfe)
videocodec_detach(zr->vfe); videocodec_detach(zr->vfe);
videocodec_exit(zr);
/* unregister i2c bus */ /* unregister i2c bus */
zoran_unregister_i2c(zr); zoran_unregister_i2c(zr);
...@@ -1079,6 +1173,8 @@ static int zoran_debugfs_show(struct seq_file *seq, void *v) ...@@ -1079,6 +1173,8 @@ static int zoran_debugfs_show(struct seq_file *seq, void *v)
seq_printf(seq, "Prepared %u\n", zr->prepared); seq_printf(seq, "Prepared %u\n", zr->prepared);
seq_printf(seq, "Queued %u\n", zr->queued); seq_printf(seq, "Queued %u\n", zr->queued);
videocodec_debugfs_show(seq);
return 0; return 0;
} }
...@@ -1096,7 +1192,6 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1096,7 +1192,6 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
struct videocodec_master *master_vfe = NULL; struct videocodec_master *master_vfe = NULL;
struct videocodec_master *master_codec = NULL; struct videocodec_master *master_codec = NULL;
int card_num; int card_num;
const char *codec_name, *vfe_name;
unsigned int nr; unsigned int nr;
int err; int err;
...@@ -1258,23 +1353,9 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1258,23 +1353,9 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
zr->card.addrs_encoder); zr->card.addrs_encoder);
pci_info(zr->pci_dev, "Initializing videocodec bus...\n"); pci_info(zr->pci_dev, "Initializing videocodec bus...\n");
err = videocodec_init(zr);
if (zr->card.video_codec) { if (err)
codec_name = codecid_to_modulename(zr->card.video_codec); goto zr_unreg_i2c;
if (codec_name) {
result = request_module(codec_name);
if (result)
pci_err(pdev, "failed to load modules %s: %d\n", codec_name, result);
}
}
if (zr->card.video_vfe) {
vfe_name = codecid_to_modulename(zr->card.video_vfe);
if (vfe_name) {
result = request_module(vfe_name);
if (result < 0)
pci_err(pdev, "failed to load modules %s: %d\n", vfe_name, result);
}
}
/* reset JPEG codec */ /* reset JPEG codec */
jpeg_codec_sleep(zr, 1); jpeg_codec_sleep(zr, 1);
...@@ -1328,6 +1409,8 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1328,6 +1409,8 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
videocodec_detach(zr->vfe); videocodec_detach(zr->vfe);
zr_detach_codec: zr_detach_codec:
videocodec_detach(zr->codec); videocodec_detach(zr->codec);
zr_unreg_videocodec:
videocodec_exit(zr);
zr_unreg_i2c: zr_unreg_i2c:
zoran_unregister_i2c(zr); zoran_unregister_i2c(zr);
zr_free_irq: zr_free_irq:
......
...@@ -390,7 +390,6 @@ static int zr36016_setup(struct videocodec *codec) ...@@ -390,7 +390,6 @@ static int zr36016_setup(struct videocodec *codec)
} }
static const struct videocodec zr36016_codec = { static const struct videocodec zr36016_codec = {
.owner = THIS_MODULE,
.name = "zr36016", .name = "zr36016",
.magic = 0L, /* magic not used */ .magic = 0L, /* magic not used */
.flags = .flags =
...@@ -409,14 +408,13 @@ static const struct videocodec zr36016_codec = { ...@@ -409,14 +408,13 @@ static const struct videocodec zr36016_codec = {
HOOK IN DRIVER AS KERNEL MODULE HOOK IN DRIVER AS KERNEL MODULE
========================================================================= */ ========================================================================= */
static int __init zr36016_init_module(void) int zr36016_init_module(void)
{ {
//dprintk(1, "ZR36016 driver %s\n",ZR016_VERSION);
zr36016_codecs = 0; zr36016_codecs = 0;
return videocodec_register(&zr36016_codec); return videocodec_register(&zr36016_codec);
} }
static void __exit zr36016_cleanup_module(void) void zr36016_cleanup_module(void)
{ {
if (zr36016_codecs) { if (zr36016_codecs) {
dprintk(1, dprintk(1,
...@@ -425,10 +423,3 @@ static void __exit zr36016_cleanup_module(void) ...@@ -425,10 +423,3 @@ static void __exit zr36016_cleanup_module(void)
} }
videocodec_unregister(&zr36016_codec); videocodec_unregister(&zr36016_codec);
} }
module_init(zr36016_init_module);
module_exit(zr36016_cleanup_module);
MODULE_AUTHOR("Wolfgang Scherr <scherr@net4you.at>");
MODULE_DESCRIPTION("Driver module for ZR36016 video frontends");
MODULE_LICENSE("GPL");
...@@ -89,4 +89,6 @@ struct zr36016 { ...@@ -89,4 +89,6 @@ struct zr36016 {
#define ZR016_SIGN 0x02 #define ZR016_SIGN 0x02
#define ZR016_YMCS 0x01 #define ZR016_YMCS 0x01
int zr36016_init_module(void);
void zr36016_cleanup_module(void);
#endif /*fndef ZR36016_H */ #endif /*fndef ZR36016_H */
...@@ -5,8 +5,6 @@ ...@@ -5,8 +5,6 @@
* Copyright (C) 2001 Wolfgang Scherr <scherr@net4you.at> * Copyright (C) 2001 Wolfgang Scherr <scherr@net4you.at>
*/ */
#define ZR050_VERSION "v0.7.1"
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/slab.h> #include <linux/slab.h>
...@@ -798,7 +796,6 @@ static int zr36050_setup(struct videocodec *codec) ...@@ -798,7 +796,6 @@ static int zr36050_setup(struct videocodec *codec)
} }
static const struct videocodec zr36050_codec = { static const struct videocodec zr36050_codec = {
.owner = THIS_MODULE,
.name = "zr36050", .name = "zr36050",
.magic = 0L, // magic not used .magic = 0L, // magic not used
.flags = .flags =
...@@ -817,14 +814,13 @@ static const struct videocodec zr36050_codec = { ...@@ -817,14 +814,13 @@ static const struct videocodec zr36050_codec = {
HOOK IN DRIVER AS KERNEL MODULE HOOK IN DRIVER AS KERNEL MODULE
========================================================================= */ ========================================================================= */
static int __init zr36050_init_module(void) int zr36050_init_module(void)
{ {
//dprintk(1, "ZR36050 driver %s\n",ZR050_VERSION);
zr36050_codecs = 0; zr36050_codecs = 0;
return videocodec_register(&zr36050_codec); return videocodec_register(&zr36050_codec);
} }
static void __exit zr36050_cleanup_module(void) void zr36050_cleanup_module(void)
{ {
if (zr36050_codecs) { if (zr36050_codecs) {
dprintk(1, dprintk(1,
...@@ -833,11 +829,3 @@ static void __exit zr36050_cleanup_module(void) ...@@ -833,11 +829,3 @@ static void __exit zr36050_cleanup_module(void)
} }
videocodec_unregister(&zr36050_codec); videocodec_unregister(&zr36050_codec);
} }
module_init(zr36050_init_module);
module_exit(zr36050_cleanup_module);
MODULE_AUTHOR("Wolfgang Scherr <scherr@net4you.at>");
MODULE_DESCRIPTION("Driver module for ZR36050 jpeg processors "
ZR050_VERSION);
MODULE_LICENSE("GPL");
...@@ -160,4 +160,6 @@ struct zr36050 { ...@@ -160,4 +160,6 @@ struct zr36050 {
#define ZR050_U_COMPONENT 1 #define ZR050_U_COMPONENT 1
#define ZR050_V_COMPONENT 2 #define ZR050_V_COMPONENT 2
int zr36050_init_module(void);
void zr36050_cleanup_module(void);
#endif /*fndef ZR36050_H */ #endif /*fndef ZR36050_H */
...@@ -5,8 +5,6 @@ ...@@ -5,8 +5,6 @@
* Copyright (C) 2002 Laurent Pinchart <laurent.pinchart@skynet.be> * Copyright (C) 2002 Laurent Pinchart <laurent.pinchart@skynet.be>
*/ */
#define ZR060_VERSION "v0.7"
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/slab.h> #include <linux/slab.h>
...@@ -831,7 +829,6 @@ static int zr36060_setup(struct videocodec *codec) ...@@ -831,7 +829,6 @@ static int zr36060_setup(struct videocodec *codec)
} }
static const struct videocodec zr36060_codec = { static const struct videocodec zr36060_codec = {
.owner = THIS_MODULE,
.name = "zr36060", .name = "zr36060",
.magic = 0L, // magic not used .magic = 0L, // magic not used
.flags = .flags =
...@@ -846,13 +843,13 @@ static const struct videocodec zr36060_codec = { ...@@ -846,13 +843,13 @@ static const struct videocodec zr36060_codec = {
// others are not used // others are not used
}; };
static int __init zr36060_init_module(void) int zr36060_init_module(void)
{ {
zr36060_codecs = 0; zr36060_codecs = 0;
return videocodec_register(&zr36060_codec); return videocodec_register(&zr36060_codec);
} }
static void __exit zr36060_cleanup_module(void) void zr36060_cleanup_module(void)
{ {
if (zr36060_codecs) { if (zr36060_codecs) {
dprintk(1, dprintk(1,
...@@ -863,10 +860,3 @@ static void __exit zr36060_cleanup_module(void) ...@@ -863,10 +860,3 @@ static void __exit zr36060_cleanup_module(void)
/* however, we can't just stay alive */ /* however, we can't just stay alive */
videocodec_unregister(&zr36060_codec); videocodec_unregister(&zr36060_codec);
} }
module_init(zr36060_init_module);
module_exit(zr36060_cleanup_module);
MODULE_AUTHOR("Laurent Pinchart <laurent.pinchart@skynet.be>");
MODULE_DESCRIPTION("Driver module for ZR36060 jpeg processors " ZR060_VERSION);
MODULE_LICENSE("GPL");
...@@ -198,4 +198,6 @@ struct zr36060 { ...@@ -198,4 +198,6 @@ struct zr36060 {
#define ZR060_SR_H_SCALE2 BIT(0) #define ZR060_SR_H_SCALE2 BIT(0)
#define ZR060_SR_H_SCALE4 (2 << 0) #define ZR060_SR_H_SCALE4 (2 << 0)
int zr36060_init_module(void);
void zr36060_cleanup_module(void);
#endif /*fndef ZR36060_H */ #endif /*fndef ZR36060_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment