1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 Mantis PCI bridge driver 4 5 Copyright (C) Manu Abraham (abraham.manu@gmail.com) 6 7 */ 8 9 #include <media/rc-core.h> 10 #include <linux/pci.h> 11 12 #include <media/dmxdev.h> 13 #include <media/dvbdev.h> 14 #include <media/dvb_demux.h> 15 #include <media/dvb_frontend.h> 16 #include <media/dvb_net.h> 17 18 #include "mantis_common.h" 19 #include "mantis_input.h" 20 21 #define MODULE_NAME "mantis_core" 22 23 void mantis_input_process(struct mantis_pci *mantis, int scancode) 24 { 25 if (mantis->rc) 26 rc_keydown(mantis->rc, RC_PROTO_UNKNOWN, scancode, 0); 27 } 28 29 int mantis_input_init(struct mantis_pci *mantis) 30 { 31 struct rc_dev *dev; 32 int err; 33 34 dev = rc_allocate_device(RC_DRIVER_SCANCODE); 35 if (!dev) { 36 dprintk(MANTIS_ERROR, 1, "Remote device allocation failed"); 37 err = -ENOMEM; 38 goto out; 39 } 40 41 snprintf(mantis->device_name, sizeof(mantis->device_name), 42 "Mantis %s IR receiver", mantis->hwconfig->model_name); 43 snprintf(mantis->input_phys, sizeof(mantis->input_phys), 44 "pci-%s/ir0", pci_name(mantis->pdev)); 45 46 dev->device_name = mantis->device_name; 47 dev->input_phys = mantis->input_phys; 48 dev->input_id.bustype = BUS_PCI; 49 dev->input_id.vendor = mantis->vendor_id; 50 dev->input_id.product = mantis->device_id; 51 dev->input_id.version = 1; 52 dev->driver_name = MODULE_NAME; 53 dev->map_name = mantis->rc_map_name ? : RC_MAP_EMPTY; 54 dev->dev.parent = &mantis->pdev->dev; 55 56 err = rc_register_device(dev); 57 if (err) { 58 dprintk(MANTIS_ERROR, 1, "IR device registration failed, ret = %d", err); 59 goto out_dev; 60 } 61 62 mantis->rc = dev; 63 return 0; 64 65 out_dev: 66 rc_free_device(dev); 67 out: 68 return err; 69 } 70 EXPORT_SYMBOL_GPL(mantis_input_init); 71 72 void mantis_input_exit(struct mantis_pci *mantis) 73 { 74 rc_unregister_device(mantis->rc); 75 } 76 EXPORT_SYMBOL_GPL(mantis_input_exit); 77