Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] firedtv: drop obsolete backend abstraction

Since the drivers/ieee1394/ backend was removed from firedtv, its I/O no
longer needs to be abstracted as exchangeable backend methods.

Also, ieee1394 variants of module and device probe and removal are no
longer there. Move module probe and removal into firedtv-fw.c where
device probe and removal are implemented.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Stefan Richter and committed by
Mauro Carvalho Chehab
92374e88 14ddc318

+140 -190
+5 -10
drivers/media/dvb/firewire/firedtv-avc.c
··· 241 241 if (unlikely(avc_debug)) 242 242 debug_fcp(fdtv->avc_data, fdtv->avc_data_length); 243 243 244 - err = fdtv->backend->write(fdtv, FCP_COMMAND_REGISTER, 245 - fdtv->avc_data, fdtv->avc_data_length); 244 + err = fdtv_write(fdtv, FCP_COMMAND_REGISTER, 245 + fdtv->avc_data, fdtv->avc_data_length); 246 246 if (err) { 247 247 dev_err(fdtv->device, "FCP command write failed\n"); 248 248 ··· 1322 1322 1323 1323 mutex_lock(&fdtv->avc_mutex); 1324 1324 1325 - ret = fdtv->backend->read(fdtv, addr, data); 1325 + ret = fdtv_read(fdtv, addr, data); 1326 1326 if (ret < 0) 1327 1327 dev_err(fdtv->device, "CMP: read I/O error\n"); 1328 1328 ··· 1340 1340 /* data[] is stack-allocated and should not be DMA-mapped. */ 1341 1341 memcpy(fdtv->avc_data, data, 8); 1342 1342 1343 - ret = fdtv->backend->lock(fdtv, addr, fdtv->avc_data); 1343 + ret = fdtv_lock(fdtv, addr, fdtv->avc_data); 1344 1344 if (ret < 0) 1345 1345 dev_err(fdtv->device, "CMP: lock I/O error\n"); 1346 1346 else ··· 1405 1405 /* FIXME: this is for the worst case - optimize */ 1406 1406 set_opcr_overhead_id(opcr, 0); 1407 1407 1408 - /* 1409 - * FIXME: allocate isochronous channel and bandwidth at IRM 1410 - * fdtv->backend->alloc_resources(fdtv, channels_mask, bw); 1411 - */ 1408 + /* FIXME: allocate isochronous channel and bandwidth at IRM */ 1412 1409 } 1413 1410 1414 1411 set_opcr_p2p_connections(opcr, get_opcr_p2p_connections(*opcr) + 1); ··· 1421 1424 /* 1422 1425 * FIXME: if old_opcr.P2P_Connections > 0, 1423 1426 * deallocate isochronous channel and bandwidth at IRM 1424 - * if (...) 1425 - * fdtv->backend->dealloc_resources(fdtv, channel, bw); 1426 1427 */ 1427 1428 1428 1429 if (++attempts < 6) /* arbitrary limit */
+3 -127
drivers/media/dvb/firewire/firedtv-dvb.c
··· 14 14 #include <linux/device.h> 15 15 #include <linux/errno.h> 16 16 #include <linux/kernel.h> 17 - #include <linux/mod_devicetable.h> 18 17 #include <linux/module.h> 19 18 #include <linux/mutex.h> 20 - #include <linux/slab.h> 21 - #include <linux/string.h> 22 19 #include <linux/types.h> 23 - #include <linux/wait.h> 24 - #include <linux/workqueue.h> 25 20 26 21 #include <dmxdev.h> 27 22 #include <dvb_demux.h> ··· 161 166 162 167 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); 163 168 164 - int fdtv_dvb_register(struct firedtv *fdtv) 169 + int fdtv_dvb_register(struct firedtv *fdtv, const char *name) 165 170 { 166 171 int err; 167 172 168 - err = dvb_register_adapter(&fdtv->adapter, fdtv_model_names[fdtv->type], 173 + err = dvb_register_adapter(&fdtv->adapter, name, 169 174 THIS_MODULE, fdtv->device, adapter_nr); 170 175 if (err < 0) 171 176 goto fail_log; ··· 205 210 206 211 dvb_net_init(&fdtv->adapter, &fdtv->dvbnet, &fdtv->demux.dmx); 207 212 208 - fdtv_frontend_init(fdtv); 213 + fdtv_frontend_init(fdtv, name); 209 214 err = dvb_register_frontend(&fdtv->adapter, &fdtv->fe); 210 215 if (err) 211 216 goto fail_net_release; ··· 243 248 dvb_dmx_release(&fdtv->demux); 244 249 dvb_unregister_adapter(&fdtv->adapter); 245 250 } 246 - 247 - const char *fdtv_model_names[] = { 248 - [FIREDTV_UNKNOWN] = "unknown type", 249 - [FIREDTV_DVB_S] = "FireDTV S/CI", 250 - [FIREDTV_DVB_C] = "FireDTV C/CI", 251 - [FIREDTV_DVB_T] = "FireDTV T/CI", 252 - [FIREDTV_DVB_S2] = "FireDTV S2 ", 253 - }; 254 - 255 - struct firedtv *fdtv_alloc(struct device *dev, 256 - const struct firedtv_backend *backend, 257 - const char *name, size_t name_len) 258 - { 259 - struct firedtv *fdtv; 260 - int i; 261 - 262 - fdtv = kzalloc(sizeof(*fdtv), GFP_KERNEL); 263 - if (!fdtv) 264 - return NULL; 265 - 266 - dev_set_drvdata(dev, fdtv); 267 - fdtv->device = dev; 268 - fdtv->isochannel = -1; 269 - fdtv->voltage = 0xff; 270 - fdtv->tone = 0xff; 271 - fdtv->backend = backend; 272 - 273 - mutex_init(&fdtv->avc_mutex); 274 - init_waitqueue_head(&fdtv->avc_wait); 275 - mutex_init(&fdtv->demux_mutex); 276 - INIT_WORK(&fdtv->remote_ctrl_work, avc_remote_ctrl_work); 277 - 278 - for (i = ARRAY_SIZE(fdtv_model_names); --i; ) 279 - if (strlen(fdtv_model_names[i]) <= name_len && 280 - strncmp(name, fdtv_model_names[i], name_len) == 0) 281 - break; 282 - fdtv->type = i; 283 - 284 - return fdtv; 285 - } 286 - 287 - #define MATCH_FLAGS (IEEE1394_MATCH_VENDOR_ID | IEEE1394_MATCH_MODEL_ID | \ 288 - IEEE1394_MATCH_SPECIFIER_ID | IEEE1394_MATCH_VERSION) 289 - 290 - #define DIGITAL_EVERYWHERE_OUI 0x001287 291 - #define AVC_UNIT_SPEC_ID_ENTRY 0x00a02d 292 - #define AVC_SW_VERSION_ENTRY 0x010001 293 - 294 - const struct ieee1394_device_id fdtv_id_table[] = { 295 - { 296 - /* FloppyDTV S/CI and FloppyDTV S2 */ 297 - .match_flags = MATCH_FLAGS, 298 - .vendor_id = DIGITAL_EVERYWHERE_OUI, 299 - .model_id = 0x000024, 300 - .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, 301 - .version = AVC_SW_VERSION_ENTRY, 302 - }, { 303 - /* FloppyDTV T/CI */ 304 - .match_flags = MATCH_FLAGS, 305 - .vendor_id = DIGITAL_EVERYWHERE_OUI, 306 - .model_id = 0x000025, 307 - .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, 308 - .version = AVC_SW_VERSION_ENTRY, 309 - }, { 310 - /* FloppyDTV C/CI */ 311 - .match_flags = MATCH_FLAGS, 312 - .vendor_id = DIGITAL_EVERYWHERE_OUI, 313 - .model_id = 0x000026, 314 - .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, 315 - .version = AVC_SW_VERSION_ENTRY, 316 - }, { 317 - /* FireDTV S/CI and FloppyDTV S2 */ 318 - .match_flags = MATCH_FLAGS, 319 - .vendor_id = DIGITAL_EVERYWHERE_OUI, 320 - .model_id = 0x000034, 321 - .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, 322 - .version = AVC_SW_VERSION_ENTRY, 323 - }, { 324 - /* FireDTV T/CI */ 325 - .match_flags = MATCH_FLAGS, 326 - .vendor_id = DIGITAL_EVERYWHERE_OUI, 327 - .model_id = 0x000035, 328 - .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, 329 - .version = AVC_SW_VERSION_ENTRY, 330 - }, { 331 - /* FireDTV C/CI */ 332 - .match_flags = MATCH_FLAGS, 333 - .vendor_id = DIGITAL_EVERYWHERE_OUI, 334 - .model_id = 0x000036, 335 - .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, 336 - .version = AVC_SW_VERSION_ENTRY, 337 - }, {} 338 - }; 339 - MODULE_DEVICE_TABLE(ieee1394, fdtv_id_table); 340 - 341 - static int __init fdtv_init(void) 342 - { 343 - int ret; 344 - 345 - ret = fdtv_fw_init(); 346 - if (ret < 0) 347 - return ret; 348 - 349 - return ret; 350 - } 351 - 352 - static void __exit fdtv_exit(void) 353 - { 354 - fdtv_fw_exit(); 355 - } 356 - 357 - module_init(fdtv_init); 358 - module_exit(fdtv_exit); 359 - 360 - MODULE_AUTHOR("Andreas Monitzer <andy@monitzer.com>"); 361 - MODULE_AUTHOR("Ben Backx <ben@bbackx.com>"); 362 - MODULE_DESCRIPTION("FireDTV DVB Driver"); 363 - MODULE_LICENSE("GPL"); 364 - MODULE_SUPPORTED_DEVICE("FireDTV DVB");
+4 -4
drivers/media/dvb/firewire/firedtv-fe.c
··· 36 36 return err; 37 37 } 38 38 39 - return fdtv->backend->start_iso(fdtv); 39 + return fdtv_start_iso(fdtv); 40 40 } 41 41 42 42 static int fdtv_sleep(struct dvb_frontend *fe) 43 43 { 44 44 struct firedtv *fdtv = fe->sec_priv; 45 45 46 - fdtv->backend->stop_iso(fdtv); 46 + fdtv_stop_iso(fdtv); 47 47 cmp_break_pp_connection(fdtv, fdtv->subunit, fdtv->isochannel); 48 48 fdtv->isochannel = -1; 49 49 return 0; ··· 165 165 return 0; 166 166 } 167 167 168 - void fdtv_frontend_init(struct firedtv *fdtv) 168 + void fdtv_frontend_init(struct firedtv *fdtv, const char *name) 169 169 { 170 170 struct dvb_frontend_ops *ops = &fdtv->fe.ops; 171 171 struct dvb_frontend_info *fi = &ops->info; ··· 266 266 dev_err(fdtv->device, "no frontend for model type %d\n", 267 267 fdtv->type); 268 268 } 269 - strcpy(fi->name, fdtv_model_names[fdtv->type]); 269 + strcpy(fi->name, name); 270 270 271 271 fdtv->fe.dvb = &fdtv->adapter; 272 272 fdtv->fe.sec_priv = fdtv;
+118 -28
drivers/media/dvb/firewire/firedtv-fw.c
··· 9 9 #include <linux/kernel.h> 10 10 #include <linux/list.h> 11 11 #include <linux/mm.h> 12 + #include <linux/mod_devicetable.h> 13 + #include <linux/module.h> 14 + #include <linux/mutex.h> 12 15 #include <linux/slab.h> 13 16 #include <linux/spinlock.h> 17 + #include <linux/string.h> 14 18 #include <linux/types.h> 19 + #include <linux/wait.h> 20 + #include <linux/workqueue.h> 15 21 16 22 #include <asm/page.h> 23 + #include <asm/system.h> 17 24 18 25 #include <dvb_demux.h> 19 26 ··· 48 41 return rcode != RCODE_COMPLETE ? -EIO : 0; 49 42 } 50 43 51 - static int node_lock(struct firedtv *fdtv, u64 addr, void *data) 44 + int fdtv_lock(struct firedtv *fdtv, u64 addr, void *data) 52 45 { 53 46 return node_req(fdtv, addr, data, 8, TCODE_LOCK_COMPARE_SWAP); 54 47 } 55 48 56 - static int node_read(struct firedtv *fdtv, u64 addr, void *data) 49 + int fdtv_read(struct firedtv *fdtv, u64 addr, void *data) 57 50 { 58 51 return node_req(fdtv, addr, data, 4, TCODE_READ_QUADLET_REQUEST); 59 52 } 60 53 61 - static int node_write(struct firedtv *fdtv, u64 addr, void *data, size_t len) 54 + int fdtv_write(struct firedtv *fdtv, u64 addr, void *data, size_t len) 62 55 { 63 56 return node_req(fdtv, addr, data, len, TCODE_WRITE_BLOCK_REQUEST); 64 57 } ··· 74 67 #define N_PAGES DIV_ROUND_UP(N_PACKETS, PACKETS_PER_PAGE) 75 68 #define IRQ_INTERVAL 16 76 69 77 - struct firedtv_receive_context { 70 + struct fdtv_ir_context { 78 71 struct fw_iso_context *context; 79 72 struct fw_iso_buffer buffer; 80 73 int interrupt_packet; ··· 82 75 char *pages[N_PAGES]; 83 76 }; 84 77 85 - static int queue_iso(struct firedtv_receive_context *ctx, int index) 78 + static int queue_iso(struct fdtv_ir_context *ctx, int index) 86 79 { 87 80 struct fw_iso_packet p; 88 81 ··· 99 92 size_t header_length, void *header, void *data) 100 93 { 101 94 struct firedtv *fdtv = data; 102 - struct firedtv_receive_context *ctx = fdtv->backend_data; 95 + struct fdtv_ir_context *ctx = fdtv->ir_context; 103 96 __be32 *h, *h_end; 104 97 int length, err, i = ctx->current_packet; 105 98 char *p, *p_end; ··· 128 121 ctx->current_packet = i; 129 122 } 130 123 131 - static int start_iso(struct firedtv *fdtv) 124 + int fdtv_start_iso(struct firedtv *fdtv) 132 125 { 133 - struct firedtv_receive_context *ctx; 126 + struct fdtv_ir_context *ctx; 134 127 struct fw_device *device = device_of(fdtv); 135 128 int i, err; 136 129 ··· 168 161 if (err) 169 162 goto fail; 170 163 171 - fdtv->backend_data = ctx; 164 + fdtv->ir_context = ctx; 172 165 173 166 return 0; 174 167 fail: ··· 181 174 return err; 182 175 } 183 176 184 - static void stop_iso(struct firedtv *fdtv) 177 + void fdtv_stop_iso(struct firedtv *fdtv) 185 178 { 186 - struct firedtv_receive_context *ctx = fdtv->backend_data; 179 + struct fdtv_ir_context *ctx = fdtv->ir_context; 187 180 188 181 fw_iso_context_stop(ctx->context); 189 182 fw_iso_buffer_destroy(&ctx->buffer, device_of(fdtv)->card); 190 183 fw_iso_context_destroy(ctx->context); 191 184 kfree(ctx); 192 185 } 193 - 194 - static const struct firedtv_backend backend = { 195 - .lock = node_lock, 196 - .read = node_read, 197 - .write = node_write, 198 - .start_iso = start_iso, 199 - .stop_iso = stop_iso, 200 - }; 201 186 202 187 static void handle_fcp(struct fw_card *card, struct fw_request *request, 203 188 int tcode, int destination, int source, int generation, ··· 237 238 .end = CSR_REGISTER_BASE + CSR_FCP_END, 238 239 }; 239 240 241 + static const char * const model_names[] = { 242 + [FIREDTV_UNKNOWN] = "unknown type", 243 + [FIREDTV_DVB_S] = "FireDTV S/CI", 244 + [FIREDTV_DVB_C] = "FireDTV C/CI", 245 + [FIREDTV_DVB_T] = "FireDTV T/CI", 246 + [FIREDTV_DVB_S2] = "FireDTV S2 ", 247 + }; 248 + 240 249 /* Adjust the template string if models with longer names appear. */ 241 250 #define MAX_MODEL_NAME_LEN sizeof("FireDTV ????") 242 251 ··· 252 245 { 253 246 struct firedtv *fdtv; 254 247 char name[MAX_MODEL_NAME_LEN]; 255 - int name_len, err; 248 + int name_len, i, err; 249 + 250 + fdtv = kzalloc(sizeof(*fdtv), GFP_KERNEL); 251 + if (!fdtv) 252 + return -ENOMEM; 253 + 254 + dev_set_drvdata(dev, fdtv); 255 + fdtv->device = dev; 256 + fdtv->isochannel = -1; 257 + fdtv->voltage = 0xff; 258 + fdtv->tone = 0xff; 259 + 260 + mutex_init(&fdtv->avc_mutex); 261 + init_waitqueue_head(&fdtv->avc_wait); 262 + mutex_init(&fdtv->demux_mutex); 263 + INIT_WORK(&fdtv->remote_ctrl_work, avc_remote_ctrl_work); 256 264 257 265 name_len = fw_csr_string(fw_unit(dev)->directory, CSR_MODEL, 258 266 name, sizeof(name)); 259 - 260 - fdtv = fdtv_alloc(dev, &backend, name, name_len >= 0 ? name_len : 0); 261 - if (!fdtv) 262 - return -ENOMEM; 267 + for (i = ARRAY_SIZE(model_names); --i; ) 268 + if (strlen(model_names[i]) <= name_len && 269 + strncmp(name, model_names[i], name_len) == 0) 270 + break; 271 + fdtv->type = i; 263 272 264 273 err = fdtv_register_rc(fdtv, dev); 265 274 if (err) ··· 289 266 if (err) 290 267 goto fail; 291 268 292 - err = fdtv_dvb_register(fdtv); 269 + err = fdtv_dvb_register(fdtv, model_names[fdtv->type]); 293 270 if (err) 294 271 goto fail; 295 272 ··· 332 309 fdtv->isochannel); 333 310 } 334 311 312 + #define MATCH_FLAGS (IEEE1394_MATCH_VENDOR_ID | IEEE1394_MATCH_MODEL_ID | \ 313 + IEEE1394_MATCH_SPECIFIER_ID | IEEE1394_MATCH_VERSION) 314 + 315 + #define DIGITAL_EVERYWHERE_OUI 0x001287 316 + #define AVC_UNIT_SPEC_ID_ENTRY 0x00a02d 317 + #define AVC_SW_VERSION_ENTRY 0x010001 318 + 319 + static const struct ieee1394_device_id fdtv_id_table[] = { 320 + { 321 + /* FloppyDTV S/CI and FloppyDTV S2 */ 322 + .match_flags = MATCH_FLAGS, 323 + .vendor_id = DIGITAL_EVERYWHERE_OUI, 324 + .model_id = 0x000024, 325 + .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, 326 + .version = AVC_SW_VERSION_ENTRY, 327 + }, { 328 + /* FloppyDTV T/CI */ 329 + .match_flags = MATCH_FLAGS, 330 + .vendor_id = DIGITAL_EVERYWHERE_OUI, 331 + .model_id = 0x000025, 332 + .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, 333 + .version = AVC_SW_VERSION_ENTRY, 334 + }, { 335 + /* FloppyDTV C/CI */ 336 + .match_flags = MATCH_FLAGS, 337 + .vendor_id = DIGITAL_EVERYWHERE_OUI, 338 + .model_id = 0x000026, 339 + .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, 340 + .version = AVC_SW_VERSION_ENTRY, 341 + }, { 342 + /* FireDTV S/CI and FloppyDTV S2 */ 343 + .match_flags = MATCH_FLAGS, 344 + .vendor_id = DIGITAL_EVERYWHERE_OUI, 345 + .model_id = 0x000034, 346 + .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, 347 + .version = AVC_SW_VERSION_ENTRY, 348 + }, { 349 + /* FireDTV T/CI */ 350 + .match_flags = MATCH_FLAGS, 351 + .vendor_id = DIGITAL_EVERYWHERE_OUI, 352 + .model_id = 0x000035, 353 + .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, 354 + .version = AVC_SW_VERSION_ENTRY, 355 + }, { 356 + /* FireDTV C/CI */ 357 + .match_flags = MATCH_FLAGS, 358 + .vendor_id = DIGITAL_EVERYWHERE_OUI, 359 + .model_id = 0x000036, 360 + .specifier_id = AVC_UNIT_SPEC_ID_ENTRY, 361 + .version = AVC_SW_VERSION_ENTRY, 362 + }, {} 363 + }; 364 + MODULE_DEVICE_TABLE(ieee1394, fdtv_id_table); 365 + 335 366 static struct fw_driver fdtv_driver = { 336 367 .driver = { 337 368 .owner = THIS_MODULE, ··· 398 321 .id_table = fdtv_id_table, 399 322 }; 400 323 401 - int __init fdtv_fw_init(void) 324 + static int __init fdtv_init(void) 402 325 { 403 326 int ret; 404 327 ··· 406 329 if (ret < 0) 407 330 return ret; 408 331 409 - return driver_register(&fdtv_driver.driver); 332 + ret = driver_register(&fdtv_driver.driver); 333 + if (ret < 0) 334 + fw_core_remove_address_handler(&fcp_handler); 335 + 336 + return ret; 410 337 } 411 338 412 - void fdtv_fw_exit(void) 339 + static void __exit fdtv_exit(void) 413 340 { 414 341 driver_unregister(&fdtv_driver.driver); 415 342 fw_core_remove_address_handler(&fcp_handler); 416 343 } 344 + 345 + module_init(fdtv_init); 346 + module_exit(fdtv_exit); 347 + 348 + MODULE_AUTHOR("Andreas Monitzer <andy@monitzer.com>"); 349 + MODULE_AUTHOR("Ben Backx <ben@bbackx.com>"); 350 + MODULE_DESCRIPTION("FireDTV DVB Driver"); 351 + MODULE_LICENSE("GPL"); 352 + MODULE_SUPPORTED_DEVICE("FireDTV DVB");
+10 -21
drivers/media/dvb/firewire/firedtv.h
··· 70 70 71 71 struct device; 72 72 struct input_dev; 73 - struct firedtv; 74 - 75 - struct firedtv_backend { 76 - int (*lock)(struct firedtv *fdtv, u64 addr, void *data); 77 - int (*read)(struct firedtv *fdtv, u64 addr, void *data); 78 - int (*write)(struct firedtv *fdtv, u64 addr, void *data, size_t len); 79 - int (*start_iso)(struct firedtv *fdtv); 80 - void (*stop_iso)(struct firedtv *fdtv); 81 - }; 73 + struct fdtv_ir_context; 82 74 83 75 struct firedtv { 84 76 struct device *device; ··· 96 104 enum model_type type; 97 105 char subunit; 98 106 char isochannel; 107 + struct fdtv_ir_context *ir_context; 108 + 99 109 fe_sec_voltage_t voltage; 100 110 fe_sec_tone_mode_t tone; 101 - 102 - const struct firedtv_backend *backend; 103 - void *backend_data; 104 111 105 112 struct mutex demux_mutex; 106 113 unsigned long channel_active; ··· 140 149 /* firedtv-dvb.c */ 141 150 int fdtv_start_feed(struct dvb_demux_feed *dvbdmxfeed); 142 151 int fdtv_stop_feed(struct dvb_demux_feed *dvbdmxfeed); 143 - int fdtv_dvb_register(struct firedtv *fdtv); 152 + int fdtv_dvb_register(struct firedtv *fdtv, const char *name); 144 153 void fdtv_dvb_unregister(struct firedtv *fdtv); 145 - struct firedtv *fdtv_alloc(struct device *dev, 146 - const struct firedtv_backend *backend, 147 - const char *name, size_t name_len); 148 - extern const char *fdtv_model_names[]; 149 - extern const struct ieee1394_device_id fdtv_id_table[]; 150 154 151 155 /* firedtv-fe.c */ 152 - void fdtv_frontend_init(struct firedtv *fdtv); 156 + void fdtv_frontend_init(struct firedtv *fdtv, const char *name); 153 157 154 158 /* firedtv-fw.c */ 155 - int fdtv_fw_init(void); 156 - void fdtv_fw_exit(void); 159 + int fdtv_lock(struct firedtv *fdtv, u64 addr, void *data); 160 + int fdtv_read(struct firedtv *fdtv, u64 addr, void *data); 161 + int fdtv_write(struct firedtv *fdtv, u64 addr, void *data, size_t len); 162 + int fdtv_start_iso(struct firedtv *fdtv); 163 + void fdtv_stop_iso(struct firedtv *fdtv); 157 164 158 165 /* firedtv-rc.c */ 159 166 #ifdef CONFIG_DVB_FIREDTV_INPUT