18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci Mantis PCI bridge driver 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci Copyright (C) Manu Abraham (abraham.manu@gmail.com) 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci*/ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <media/rc-core.h> 108c2ecf20Sopenharmony_ci#include <linux/pci.h> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <media/dmxdev.h> 138c2ecf20Sopenharmony_ci#include <media/dvbdev.h> 148c2ecf20Sopenharmony_ci#include <media/dvb_demux.h> 158c2ecf20Sopenharmony_ci#include <media/dvb_frontend.h> 168c2ecf20Sopenharmony_ci#include <media/dvb_net.h> 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci#include "mantis_common.h" 198c2ecf20Sopenharmony_ci#include "mantis_input.h" 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci#define MODULE_NAME "mantis_core" 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_civoid mantis_input_process(struct mantis_pci *mantis, int scancode) 248c2ecf20Sopenharmony_ci{ 258c2ecf20Sopenharmony_ci if (mantis->rc) 268c2ecf20Sopenharmony_ci rc_keydown(mantis->rc, RC_PROTO_UNKNOWN, scancode, 0); 278c2ecf20Sopenharmony_ci} 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ciint mantis_input_init(struct mantis_pci *mantis) 308c2ecf20Sopenharmony_ci{ 318c2ecf20Sopenharmony_ci struct rc_dev *dev; 328c2ecf20Sopenharmony_ci int err; 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci dev = rc_allocate_device(RC_DRIVER_SCANCODE); 358c2ecf20Sopenharmony_ci if (!dev) { 368c2ecf20Sopenharmony_ci dprintk(MANTIS_ERROR, 1, "Remote device allocation failed"); 378c2ecf20Sopenharmony_ci err = -ENOMEM; 388c2ecf20Sopenharmony_ci goto out; 398c2ecf20Sopenharmony_ci } 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci snprintf(mantis->device_name, sizeof(mantis->device_name), 428c2ecf20Sopenharmony_ci "Mantis %s IR receiver", mantis->hwconfig->model_name); 438c2ecf20Sopenharmony_ci snprintf(mantis->input_phys, sizeof(mantis->input_phys), 448c2ecf20Sopenharmony_ci "pci-%s/ir0", pci_name(mantis->pdev)); 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci dev->device_name = mantis->device_name; 478c2ecf20Sopenharmony_ci dev->input_phys = mantis->input_phys; 488c2ecf20Sopenharmony_ci dev->input_id.bustype = BUS_PCI; 498c2ecf20Sopenharmony_ci dev->input_id.vendor = mantis->vendor_id; 508c2ecf20Sopenharmony_ci dev->input_id.product = mantis->device_id; 518c2ecf20Sopenharmony_ci dev->input_id.version = 1; 528c2ecf20Sopenharmony_ci dev->driver_name = MODULE_NAME; 538c2ecf20Sopenharmony_ci dev->map_name = mantis->rc_map_name ? : RC_MAP_EMPTY; 548c2ecf20Sopenharmony_ci dev->dev.parent = &mantis->pdev->dev; 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci err = rc_register_device(dev); 578c2ecf20Sopenharmony_ci if (err) { 588c2ecf20Sopenharmony_ci dprintk(MANTIS_ERROR, 1, "IR device registration failed, ret = %d", err); 598c2ecf20Sopenharmony_ci goto out_dev; 608c2ecf20Sopenharmony_ci } 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci mantis->rc = dev; 638c2ecf20Sopenharmony_ci return 0; 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ciout_dev: 668c2ecf20Sopenharmony_ci rc_free_device(dev); 678c2ecf20Sopenharmony_ciout: 688c2ecf20Sopenharmony_ci return err; 698c2ecf20Sopenharmony_ci} 708c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(mantis_input_init); 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_civoid mantis_input_exit(struct mantis_pci *mantis) 738c2ecf20Sopenharmony_ci{ 748c2ecf20Sopenharmony_ci rc_unregister_device(mantis->rc); 758c2ecf20Sopenharmony_ci} 768c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(mantis_input_exit); 77