linux/drivers/media/rc/img-ir/img-ir-jvc.c
<<
>>
Prefs
   1/*
   2 * ImgTec IR Decoder setup for JVC protocol.
   3 *
   4 * Copyright 2012-2014 Imagination Technologies Ltd.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by the
   8 * Free Software Foundation; either version 2 of the License, or (at your
   9 * option) any later version.
  10 */
  11
  12#include "img-ir-hw.h"
  13
  14/* Convert JVC data to a scancode */
  15static int img_ir_jvc_scancode(int len, u64 raw, u64 enabled_protocols,
  16                               struct img_ir_scancode_req *request)
  17{
  18        unsigned int cust, data;
  19
  20        if (len != 16)
  21                return -EINVAL;
  22
  23        cust = (raw >> 0) & 0xff;
  24        data = (raw >> 8) & 0xff;
  25
  26        request->protocol = RC_TYPE_JVC;
  27        request->scancode = cust << 8 | data;
  28        return IMG_IR_SCANCODE;
  29}
  30
  31/* Convert JVC scancode to JVC data filter */
  32static int img_ir_jvc_filter(const struct rc_scancode_filter *in,
  33                             struct img_ir_filter *out, u64 protocols)
  34{
  35        unsigned int cust, data;
  36        unsigned int cust_m, data_m;
  37
  38        cust   = (in->data >> 8) & 0xff;
  39        cust_m = (in->mask >> 8) & 0xff;
  40        data   = (in->data >> 0) & 0xff;
  41        data_m = (in->mask >> 0) & 0xff;
  42
  43        out->data = cust   | data << 8;
  44        out->mask = cust_m | data_m << 8;
  45
  46        return 0;
  47}
  48
  49/*
  50 * JVC decoder
  51 * See also http://www.sbprojects.com/knowledge/ir/jvc.php
  52 *          http://support.jvc.com/consumer/support/documents/RemoteCodes.pdf
  53 */
  54struct img_ir_decoder img_ir_jvc = {
  55        .type = RC_BIT_JVC,
  56        .control = {
  57                .decoden = 1,
  58                .code_type = IMG_IR_CODETYPE_PULSEDIST,
  59        },
  60        /* main timings */
  61        .unit = 527500, /* 527.5 us */
  62        .timings = {
  63                /* leader symbol */
  64                .ldr = {
  65                        .pulse = { 16   /* 8.44 ms */ },
  66                        .space = { 8    /* 4.22 ms */ },
  67                },
  68                /* 0 symbol */
  69                .s00 = {
  70                        .pulse = { 1    /* 527.5 us +-60 us */ },
  71                        .space = { 1    /* 527.5 us */ },
  72                },
  73                /* 1 symbol */
  74                .s01 = {
  75                        .pulse = { 1    /* 527.5 us +-60 us */ },
  76                        .space = { 3    /* 1.5825 ms +-40 us */ },
  77                },
  78                /* free time */
  79                .ft = {
  80                        .minlen = 16,
  81                        .maxlen = 16,
  82                        .ft_min = 10,   /* 5.275 ms */
  83                },
  84        },
  85        /* scancode logic */
  86        .scancode = img_ir_jvc_scancode,
  87        .filter = img_ir_jvc_filter,
  88};
  89