diff options
author | Adrian Bunk <bunk@stusta.de> | 2006-01-05 21:28:52 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-01-31 20:23:42 -0500 |
commit | 532a3de17038ea3bf75814778a6c4a25d01eab74 (patch) | |
tree | 1c10c00d72f7a3932c3f374b32ae76912b8df1e0 /drivers/usb/media/ov511.c | |
parent | 7f2c01ab8ad50c74d174acdd814ddb53383bee93 (diff) |
[PATCH] USB: drivers/usb/media/ov511.c: remove hooks for the decomp module
- the decomp module is not intended for inclusion into the kernel
- people using the decomp module from upstream will usually simply use
the complete upstream 2.xx driver
Therefore, there seems to be no good reason spending some bytes of
kernel memory for hooks for this module.
Signed-off-by: Adrian Bunk <bunk@stusta.de>
Signed-off-by: Mark McClelland <mark@ovcam.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/media/ov511.c')
-rw-r--r-- | drivers/usb/media/ov511.c | 196 |
1 files changed, 2 insertions, 194 deletions
diff --git a/drivers/usb/media/ov511.c b/drivers/usb/media/ov511.c index 8af665bbe330..51e9cc06f7e3 100644 --- a/drivers/usb/media/ov511.c +++ b/drivers/usb/media/ov511.c | |||
@@ -204,22 +204,10 @@ MODULE_LICENSE("GPL"); | |||
204 | 204 | ||
205 | static struct usb_driver ov511_driver; | 205 | static struct usb_driver ov511_driver; |
206 | 206 | ||
207 | static struct ov51x_decomp_ops *ov511_decomp_ops; | ||
208 | static struct ov51x_decomp_ops *ov511_mmx_decomp_ops; | ||
209 | static struct ov51x_decomp_ops *ov518_decomp_ops; | ||
210 | static struct ov51x_decomp_ops *ov518_mmx_decomp_ops; | ||
211 | |||
212 | /* Number of times to retry a failed I2C transaction. Increase this if you | 207 | /* Number of times to retry a failed I2C transaction. Increase this if you |
213 | * are getting "Failed to read sensor ID..." */ | 208 | * are getting "Failed to read sensor ID..." */ |
214 | static const int i2c_detect_tries = 5; | 209 | static const int i2c_detect_tries = 5; |
215 | 210 | ||
216 | /* MMX support is present in kernel and CPU. Checked upon decomp module load. */ | ||
217 | #if defined(__i386__) || defined(__x86_64__) | ||
218 | #define ov51x_mmx_available (cpu_has_mmx) | ||
219 | #else | ||
220 | #define ov51x_mmx_available (0) | ||
221 | #endif | ||
222 | |||
223 | static struct usb_device_id device_table [] = { | 211 | static struct usb_device_id device_table [] = { |
224 | { USB_DEVICE(VEND_OMNIVISION, PROD_OV511) }, | 212 | { USB_DEVICE(VEND_OMNIVISION, PROD_OV511) }, |
225 | { USB_DEVICE(VEND_OMNIVISION, PROD_OV511PLUS) }, | 213 | { USB_DEVICE(VEND_OMNIVISION, PROD_OV511PLUS) }, |
@@ -3012,93 +3000,18 @@ yuv420raw_to_yuv420p(struct ov511_frame *frame, | |||
3012 | * | 3000 | * |
3013 | **********************************************************************/ | 3001 | **********************************************************************/ |
3014 | 3002 | ||
3015 | /* Chooses a decompression module, locks it, and sets ov->decomp_ops | ||
3016 | * accordingly. Returns -ENXIO if decompressor is not available, otherwise | ||
3017 | * returns 0 if no other error. | ||
3018 | */ | ||
3019 | static int | 3003 | static int |
3020 | request_decompressor(struct usb_ov511 *ov) | 3004 | request_decompressor(struct usb_ov511 *ov) |
3021 | { | 3005 | { |
3022 | if (!ov) | 3006 | if (ov->bclass == BCL_OV511 || ov->bclass == BCL_OV518) { |
3023 | return -ENODEV; | 3007 | err("No decompressor available"); |
3024 | |||
3025 | if (ov->decomp_ops) { | ||
3026 | err("ERROR: Decompressor already requested!"); | ||
3027 | return -EINVAL; | ||
3028 | } | ||
3029 | |||
3030 | lock_kernel(); | ||
3031 | |||
3032 | /* Try to get MMX, and fall back on no-MMX if necessary */ | ||
3033 | if (ov->bclass == BCL_OV511) { | ||
3034 | if (ov511_mmx_decomp_ops) { | ||
3035 | PDEBUG(3, "Using OV511 MMX decompressor"); | ||
3036 | ov->decomp_ops = ov511_mmx_decomp_ops; | ||
3037 | } else if (ov511_decomp_ops) { | ||
3038 | PDEBUG(3, "Using OV511 decompressor"); | ||
3039 | ov->decomp_ops = ov511_decomp_ops; | ||
3040 | } else { | ||
3041 | err("No decompressor available"); | ||
3042 | } | ||
3043 | } else if (ov->bclass == BCL_OV518) { | ||
3044 | if (ov518_mmx_decomp_ops) { | ||
3045 | PDEBUG(3, "Using OV518 MMX decompressor"); | ||
3046 | ov->decomp_ops = ov518_mmx_decomp_ops; | ||
3047 | } else if (ov518_decomp_ops) { | ||
3048 | PDEBUG(3, "Using OV518 decompressor"); | ||
3049 | ov->decomp_ops = ov518_decomp_ops; | ||
3050 | } else { | ||
3051 | err("No decompressor available"); | ||
3052 | } | ||
3053 | } else { | 3008 | } else { |
3054 | err("Unknown bridge"); | 3009 | err("Unknown bridge"); |
3055 | } | 3010 | } |
3056 | 3011 | ||
3057 | if (!ov->decomp_ops) | ||
3058 | goto nosys; | ||
3059 | |||
3060 | if (!ov->decomp_ops->owner) { | ||
3061 | ov->decomp_ops = NULL; | ||
3062 | goto nosys; | ||
3063 | } | ||
3064 | |||
3065 | if (!try_module_get(ov->decomp_ops->owner)) | ||
3066 | goto nosys; | ||
3067 | |||
3068 | unlock_kernel(); | ||
3069 | return 0; | ||
3070 | |||
3071 | nosys: | ||
3072 | unlock_kernel(); | ||
3073 | return -ENOSYS; | 3012 | return -ENOSYS; |
3074 | } | 3013 | } |
3075 | 3014 | ||
3076 | /* Unlocks decompression module and nulls ov->decomp_ops. Safe to call even | ||
3077 | * if ov->decomp_ops is NULL. | ||
3078 | */ | ||
3079 | static void | ||
3080 | release_decompressor(struct usb_ov511 *ov) | ||
3081 | { | ||
3082 | int released = 0; /* Did we actually do anything? */ | ||
3083 | |||
3084 | if (!ov) | ||
3085 | return; | ||
3086 | |||
3087 | lock_kernel(); | ||
3088 | |||
3089 | if (ov->decomp_ops) { | ||
3090 | module_put(ov->decomp_ops->owner); | ||
3091 | released = 1; | ||
3092 | } | ||
3093 | |||
3094 | ov->decomp_ops = NULL; | ||
3095 | |||
3096 | unlock_kernel(); | ||
3097 | |||
3098 | if (released) | ||
3099 | PDEBUG(3, "Decompressor released"); | ||
3100 | } | ||
3101 | |||
3102 | static void | 3015 | static void |
3103 | decompress(struct usb_ov511 *ov, struct ov511_frame *frame, | 3016 | decompress(struct usb_ov511 *ov, struct ov511_frame *frame, |
3104 | unsigned char *pIn0, unsigned char *pOut0) | 3017 | unsigned char *pIn0, unsigned char *pOut0) |
@@ -3107,31 +3020,6 @@ decompress(struct usb_ov511 *ov, struct ov511_frame *frame, | |||
3107 | if (request_decompressor(ov)) | 3020 | if (request_decompressor(ov)) |
3108 | return; | 3021 | return; |
3109 | 3022 | ||
3110 | PDEBUG(4, "Decompressing %d bytes", frame->bytes_recvd); | ||
3111 | |||
3112 | if (frame->format == VIDEO_PALETTE_GREY | ||
3113 | && ov->decomp_ops->decomp_400) { | ||
3114 | int ret = ov->decomp_ops->decomp_400( | ||
3115 | pIn0, | ||
3116 | pOut0, | ||
3117 | frame->compbuf, | ||
3118 | frame->rawwidth, | ||
3119 | frame->rawheight, | ||
3120 | frame->bytes_recvd); | ||
3121 | PDEBUG(4, "DEBUG: decomp_400 returned %d", ret); | ||
3122 | } else if (frame->format != VIDEO_PALETTE_GREY | ||
3123 | && ov->decomp_ops->decomp_420) { | ||
3124 | int ret = ov->decomp_ops->decomp_420( | ||
3125 | pIn0, | ||
3126 | pOut0, | ||
3127 | frame->compbuf, | ||
3128 | frame->rawwidth, | ||
3129 | frame->rawheight, | ||
3130 | frame->bytes_recvd); | ||
3131 | PDEBUG(4, "DEBUG: decomp_420 returned %d", ret); | ||
3132 | } else { | ||
3133 | err("Decompressor does not support this format"); | ||
3134 | } | ||
3135 | } | 3023 | } |
3136 | 3024 | ||
3137 | /********************************************************************** | 3025 | /********************************************************************** |
@@ -4087,8 +3975,6 @@ ov51x_v4l1_close(struct inode *inode, struct file *file) | |||
4087 | ov->user--; | 3975 | ov->user--; |
4088 | ov51x_stop_isoc(ov); | 3976 | ov51x_stop_isoc(ov); |
4089 | 3977 | ||
4090 | release_decompressor(ov); | ||
4091 | |||
4092 | if (ov->led_policy == LED_AUTO) | 3978 | if (ov->led_policy == LED_AUTO) |
4093 | ov51x_led_control(ov, 0); | 3979 | ov51x_led_control(ov, 0); |
4094 | 3980 | ||
@@ -6021,82 +5907,6 @@ static struct usb_driver ov511_driver = { | |||
6021 | * | 5907 | * |
6022 | ***************************************************************************/ | 5908 | ***************************************************************************/ |
6023 | 5909 | ||
6024 | /* Returns 0 for success */ | ||
6025 | int | ||
6026 | ov511_register_decomp_module(int ver, struct ov51x_decomp_ops *ops, int ov518, | ||
6027 | int mmx) | ||
6028 | { | ||
6029 | if (ver != DECOMP_INTERFACE_VER) { | ||
6030 | err("Decompression module has incompatible"); | ||
6031 | err("interface version %d", ver); | ||
6032 | err("Interface version %d is required", DECOMP_INTERFACE_VER); | ||
6033 | return -EINVAL; | ||
6034 | } | ||
6035 | |||
6036 | if (!ops) | ||
6037 | return -EFAULT; | ||
6038 | |||
6039 | if (mmx && !ov51x_mmx_available) { | ||
6040 | err("MMX not available on this system or kernel"); | ||
6041 | return -EINVAL; | ||
6042 | } | ||
6043 | |||
6044 | lock_kernel(); | ||
6045 | |||
6046 | if (ov518) { | ||
6047 | if (mmx) { | ||
6048 | if (ov518_mmx_decomp_ops) | ||
6049 | goto err_in_use; | ||
6050 | else | ||
6051 | ov518_mmx_decomp_ops = ops; | ||
6052 | } else { | ||
6053 | if (ov518_decomp_ops) | ||
6054 | goto err_in_use; | ||
6055 | else | ||
6056 | ov518_decomp_ops = ops; | ||
6057 | } | ||
6058 | } else { | ||
6059 | if (mmx) { | ||
6060 | if (ov511_mmx_decomp_ops) | ||
6061 | goto err_in_use; | ||
6062 | else | ||
6063 | ov511_mmx_decomp_ops = ops; | ||
6064 | } else { | ||
6065 | if (ov511_decomp_ops) | ||
6066 | goto err_in_use; | ||
6067 | else | ||
6068 | ov511_decomp_ops = ops; | ||
6069 | } | ||
6070 | } | ||
6071 | |||
6072 | unlock_kernel(); | ||
6073 | return 0; | ||
6074 | |||
6075 | err_in_use: | ||
6076 | unlock_kernel(); | ||
6077 | return -EBUSY; | ||
6078 | } | ||
6079 | |||
6080 | void | ||
6081 | ov511_deregister_decomp_module(int ov518, int mmx) | ||
6082 | { | ||
6083 | lock_kernel(); | ||
6084 | |||
6085 | if (ov518) { | ||
6086 | if (mmx) | ||
6087 | ov518_mmx_decomp_ops = NULL; | ||
6088 | else | ||
6089 | ov518_decomp_ops = NULL; | ||
6090 | } else { | ||
6091 | if (mmx) | ||
6092 | ov511_mmx_decomp_ops = NULL; | ||
6093 | else | ||
6094 | ov511_decomp_ops = NULL; | ||
6095 | } | ||
6096 | |||
6097 | unlock_kernel(); | ||
6098 | } | ||
6099 | |||
6100 | static int __init | 5910 | static int __init |
6101 | usb_ov511_init(void) | 5911 | usb_ov511_init(void) |
6102 | { | 5912 | { |
@@ -6123,5 +5933,3 @@ usb_ov511_exit(void) | |||
6123 | module_init(usb_ov511_init); | 5933 | module_init(usb_ov511_init); |
6124 | module_exit(usb_ov511_exit); | 5934 | module_exit(usb_ov511_exit); |
6125 | 5935 | ||
6126 | EXPORT_SYMBOL(ov511_register_decomp_module); | ||
6127 | EXPORT_SYMBOL(ov511_deregister_decomp_module); | ||