linux/drivers/media/pci/mantis/mantis_input.c
<<
>>
Prefs
   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
  23void 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
  29int 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
  65out_dev:
  66        rc_free_device(dev);
  67out:
  68        return err;
  69}
  70EXPORT_SYMBOL_GPL(mantis_input_init);
  71
  72void mantis_input_exit(struct mantis_pci *mantis)
  73{
  74        rc_unregister_device(mantis->rc);
  75}
  76EXPORT_SYMBOL_GPL(mantis_input_exit);
  77