162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci Mantis PCI bridge driver 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci Copyright (C) Manu Abraham (abraham.manu@gmail.com) 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci*/ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <media/rc-core.h> 1062306a36Sopenharmony_ci#include <linux/pci.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <media/dmxdev.h> 1362306a36Sopenharmony_ci#include <media/dvbdev.h> 1462306a36Sopenharmony_ci#include <media/dvb_demux.h> 1562306a36Sopenharmony_ci#include <media/dvb_frontend.h> 1662306a36Sopenharmony_ci#include <media/dvb_net.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#include "mantis_common.h" 1962306a36Sopenharmony_ci#include "mantis_input.h" 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define MODULE_NAME "mantis_core" 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_civoid mantis_input_process(struct mantis_pci *mantis, int scancode) 2462306a36Sopenharmony_ci{ 2562306a36Sopenharmony_ci if (mantis->rc) 2662306a36Sopenharmony_ci rc_keydown(mantis->rc, RC_PROTO_UNKNOWN, scancode, 0); 2762306a36Sopenharmony_ci} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ciint mantis_input_init(struct mantis_pci *mantis) 3062306a36Sopenharmony_ci{ 3162306a36Sopenharmony_ci struct rc_dev *dev; 3262306a36Sopenharmony_ci int err; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci dev = rc_allocate_device(RC_DRIVER_SCANCODE); 3562306a36Sopenharmony_ci if (!dev) { 3662306a36Sopenharmony_ci dprintk(MANTIS_ERROR, 1, "Remote device allocation failed"); 3762306a36Sopenharmony_ci err = -ENOMEM; 3862306a36Sopenharmony_ci goto out; 3962306a36Sopenharmony_ci } 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci snprintf(mantis->device_name, sizeof(mantis->device_name), 4262306a36Sopenharmony_ci "Mantis %s IR receiver", mantis->hwconfig->model_name); 4362306a36Sopenharmony_ci snprintf(mantis->input_phys, sizeof(mantis->input_phys), 4462306a36Sopenharmony_ci "pci-%s/ir0", pci_name(mantis->pdev)); 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci dev->device_name = mantis->device_name; 4762306a36Sopenharmony_ci dev->input_phys = mantis->input_phys; 4862306a36Sopenharmony_ci dev->input_id.bustype = BUS_PCI; 4962306a36Sopenharmony_ci dev->input_id.vendor = mantis->vendor_id; 5062306a36Sopenharmony_ci dev->input_id.product = mantis->device_id; 5162306a36Sopenharmony_ci dev->input_id.version = 1; 5262306a36Sopenharmony_ci dev->driver_name = MODULE_NAME; 5362306a36Sopenharmony_ci dev->map_name = mantis->rc_map_name ? : RC_MAP_EMPTY; 5462306a36Sopenharmony_ci dev->dev.parent = &mantis->pdev->dev; 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci err = rc_register_device(dev); 5762306a36Sopenharmony_ci if (err) { 5862306a36Sopenharmony_ci dprintk(MANTIS_ERROR, 1, "IR device registration failed, ret = %d", err); 5962306a36Sopenharmony_ci goto out_dev; 6062306a36Sopenharmony_ci } 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci mantis->rc = dev; 6362306a36Sopenharmony_ci return 0; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ciout_dev: 6662306a36Sopenharmony_ci rc_free_device(dev); 6762306a36Sopenharmony_ciout: 6862306a36Sopenharmony_ci return err; 6962306a36Sopenharmony_ci} 7062306a36Sopenharmony_ciEXPORT_SYMBOL_GPL(mantis_input_init); 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_civoid mantis_input_exit(struct mantis_pci *mantis) 7362306a36Sopenharmony_ci{ 7462306a36Sopenharmony_ci rc_unregister_device(mantis->rc); 7562306a36Sopenharmony_ci} 7662306a36Sopenharmony_ciEXPORT_SYMBOL_GPL(mantis_input_exit); 77