Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  * ImgTec IR Decoder setup for JVC protocol.
0004  *
0005  * Copyright 2012-2014 Imagination Technologies Ltd.
0006  */
0007 
0008 #include "img-ir-hw.h"
0009 
0010 /* Convert JVC data to a scancode */
0011 static int img_ir_jvc_scancode(int len, u64 raw, u64 enabled_protocols,
0012                    struct img_ir_scancode_req *request)
0013 {
0014     unsigned int cust, data;
0015 
0016     if (len != 16)
0017         return -EINVAL;
0018 
0019     cust = (raw >> 0) & 0xff;
0020     data = (raw >> 8) & 0xff;
0021 
0022     request->protocol = RC_PROTO_JVC;
0023     request->scancode = cust << 8 | data;
0024     return IMG_IR_SCANCODE;
0025 }
0026 
0027 /* Convert JVC scancode to JVC data filter */
0028 static int img_ir_jvc_filter(const struct rc_scancode_filter *in,
0029                  struct img_ir_filter *out, u64 protocols)
0030 {
0031     unsigned int cust, data;
0032     unsigned int cust_m, data_m;
0033 
0034     cust   = (in->data >> 8) & 0xff;
0035     cust_m = (in->mask >> 8) & 0xff;
0036     data   = (in->data >> 0) & 0xff;
0037     data_m = (in->mask >> 0) & 0xff;
0038 
0039     out->data = cust   | data << 8;
0040     out->mask = cust_m | data_m << 8;
0041 
0042     return 0;
0043 }
0044 
0045 /*
0046  * JVC decoder
0047  * See also http://www.sbprojects.com/knowledge/ir/jvc.php
0048  *          http://support.jvc.com/consumer/support/documents/RemoteCodes.pdf
0049  */
0050 struct img_ir_decoder img_ir_jvc = {
0051     .type = RC_PROTO_BIT_JVC,
0052     .control = {
0053         .decoden = 1,
0054         .code_type = IMG_IR_CODETYPE_PULSEDIST,
0055     },
0056     /* main timings */
0057     .unit = 527500, /* 527.5 us */
0058     .timings = {
0059         /* leader symbol */
0060         .ldr = {
0061             .pulse = { 16   /* 8.44 ms */ },
0062             .space = { 8    /* 4.22 ms */ },
0063         },
0064         /* 0 symbol */
0065         .s00 = {
0066             .pulse = { 1    /* 527.5 us +-60 us */ },
0067             .space = { 1    /* 527.5 us */ },
0068         },
0069         /* 1 symbol */
0070         .s01 = {
0071             .pulse = { 1    /* 527.5 us +-60 us */ },
0072             .space = { 3    /* 1.5825 ms +-40 us */ },
0073         },
0074         /* free time */
0075         .ft = {
0076             .minlen = 16,
0077             .maxlen = 16,
0078             .ft_min = 10,   /* 5.275 ms */
0079         },
0080     },
0081     /* scancode logic */
0082     .scancode = img_ir_jvc_scancode,
0083     .filter = img_ir_jvc_filter,
0084 };