18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Montage Technology M88DS3103/M88RS6000 demodulator driver 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2013 Antti Palosaari <crope@iki.fi> 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#ifndef M88DS3103_PRIV_H 98c2ecf20Sopenharmony_ci#define M88DS3103_PRIV_H 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include <media/dvb_frontend.h> 128c2ecf20Sopenharmony_ci#include "m88ds3103.h" 138c2ecf20Sopenharmony_ci#include <media/dvb_math.h> 148c2ecf20Sopenharmony_ci#include <linux/firmware.h> 158c2ecf20Sopenharmony_ci#include <linux/i2c-mux.h> 168c2ecf20Sopenharmony_ci#include <linux/regmap.h> 178c2ecf20Sopenharmony_ci#include <linux/math64.h> 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#define M88DS3103B_FIRMWARE "dvb-demod-m88ds3103b.fw" 208c2ecf20Sopenharmony_ci#define M88DS3103_FIRMWARE "dvb-demod-m88ds3103.fw" 218c2ecf20Sopenharmony_ci#define M88RS6000_FIRMWARE "dvb-demod-m88rs6000.fw" 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci#define M88RS6000_CHIP_ID 0x74 248c2ecf20Sopenharmony_ci#define M88DS3103_CHIP_ID 0x70 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci#define M88DS3103_CHIPTYPE_3103 0 278c2ecf20Sopenharmony_ci#define M88DS3103_CHIPTYPE_RS6000 1 288c2ecf20Sopenharmony_ci#define M88DS3103_CHIPTYPE_3103B 2 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_cistruct m88ds3103_dev { 318c2ecf20Sopenharmony_ci struct i2c_client *client; 328c2ecf20Sopenharmony_ci struct i2c_client *dt_client; 338c2ecf20Sopenharmony_ci struct regmap_config regmap_config; 348c2ecf20Sopenharmony_ci struct regmap *regmap; 358c2ecf20Sopenharmony_ci struct m88ds3103_config config; 368c2ecf20Sopenharmony_ci const struct m88ds3103_config *cfg; 378c2ecf20Sopenharmony_ci struct dvb_frontend fe; 388c2ecf20Sopenharmony_ci enum fe_delivery_system delivery_system; 398c2ecf20Sopenharmony_ci enum fe_status fe_status; 408c2ecf20Sopenharmony_ci u32 dvbv3_ber; /* for old DVBv3 API read_ber */ 418c2ecf20Sopenharmony_ci bool warm; /* FW running */ 428c2ecf20Sopenharmony_ci struct i2c_mux_core *muxc; 438c2ecf20Sopenharmony_ci /* auto detect chip id to do different config */ 448c2ecf20Sopenharmony_ci u8 chip_id; 458c2ecf20Sopenharmony_ci /* chip type to differentiate m88rs6000 from m88ds3103b */ 468c2ecf20Sopenharmony_ci u8 chiptype; 478c2ecf20Sopenharmony_ci /* main mclk is calculated for M88RS6000 dynamically */ 488c2ecf20Sopenharmony_ci s32 mclk; 498c2ecf20Sopenharmony_ci u64 post_bit_error; 508c2ecf20Sopenharmony_ci u64 post_bit_count; 518c2ecf20Sopenharmony_ci u8 dt_addr; 528c2ecf20Sopenharmony_ci}; 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_cistruct m88ds3103_reg_val { 558c2ecf20Sopenharmony_ci u8 reg; 568c2ecf20Sopenharmony_ci u8 val; 578c2ecf20Sopenharmony_ci}; 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_cistatic const struct m88ds3103_reg_val m88ds3103_dvbs_init_reg_vals[] = { 608c2ecf20Sopenharmony_ci {0x23, 0x07}, 618c2ecf20Sopenharmony_ci {0x08, 0x03}, 628c2ecf20Sopenharmony_ci {0x0c, 0x02}, 638c2ecf20Sopenharmony_ci {0x21, 0x54}, 648c2ecf20Sopenharmony_ci {0x25, 0x8a}, 658c2ecf20Sopenharmony_ci {0x27, 0x31}, 668c2ecf20Sopenharmony_ci {0x30, 0x08}, 678c2ecf20Sopenharmony_ci {0x31, 0x40}, 688c2ecf20Sopenharmony_ci {0x32, 0x32}, 698c2ecf20Sopenharmony_ci {0x35, 0xff}, 708c2ecf20Sopenharmony_ci {0x3a, 0x00}, 718c2ecf20Sopenharmony_ci {0x37, 0x10}, 728c2ecf20Sopenharmony_ci {0x38, 0x10}, 738c2ecf20Sopenharmony_ci {0x39, 0x02}, 748c2ecf20Sopenharmony_ci {0x42, 0x60}, 758c2ecf20Sopenharmony_ci {0x4a, 0x80}, 768c2ecf20Sopenharmony_ci {0x4b, 0x04}, 778c2ecf20Sopenharmony_ci {0x4d, 0x91}, 788c2ecf20Sopenharmony_ci {0x5d, 0xc8}, 798c2ecf20Sopenharmony_ci {0x50, 0x36}, 808c2ecf20Sopenharmony_ci {0x51, 0x36}, 818c2ecf20Sopenharmony_ci {0x52, 0x36}, 828c2ecf20Sopenharmony_ci {0x53, 0x36}, 838c2ecf20Sopenharmony_ci {0x56, 0x01}, 848c2ecf20Sopenharmony_ci {0x63, 0x0f}, 858c2ecf20Sopenharmony_ci {0x64, 0x30}, 868c2ecf20Sopenharmony_ci {0x65, 0x40}, 878c2ecf20Sopenharmony_ci {0x68, 0x26}, 888c2ecf20Sopenharmony_ci {0x69, 0x4c}, 898c2ecf20Sopenharmony_ci {0x70, 0x20}, 908c2ecf20Sopenharmony_ci {0x71, 0x70}, 918c2ecf20Sopenharmony_ci {0x72, 0x04}, 928c2ecf20Sopenharmony_ci {0x73, 0x00}, 938c2ecf20Sopenharmony_ci {0x70, 0x40}, 948c2ecf20Sopenharmony_ci {0x71, 0x70}, 958c2ecf20Sopenharmony_ci {0x72, 0x04}, 968c2ecf20Sopenharmony_ci {0x73, 0x00}, 978c2ecf20Sopenharmony_ci {0x70, 0x60}, 988c2ecf20Sopenharmony_ci {0x71, 0x70}, 998c2ecf20Sopenharmony_ci {0x72, 0x04}, 1008c2ecf20Sopenharmony_ci {0x73, 0x00}, 1018c2ecf20Sopenharmony_ci {0x70, 0x80}, 1028c2ecf20Sopenharmony_ci {0x71, 0x70}, 1038c2ecf20Sopenharmony_ci {0x72, 0x04}, 1048c2ecf20Sopenharmony_ci {0x73, 0x00}, 1058c2ecf20Sopenharmony_ci {0x70, 0xa0}, 1068c2ecf20Sopenharmony_ci {0x71, 0x70}, 1078c2ecf20Sopenharmony_ci {0x72, 0x04}, 1088c2ecf20Sopenharmony_ci {0x73, 0x00}, 1098c2ecf20Sopenharmony_ci {0x70, 0x1f}, 1108c2ecf20Sopenharmony_ci {0x76, 0x38}, 1118c2ecf20Sopenharmony_ci {0x77, 0xa6}, 1128c2ecf20Sopenharmony_ci {0x78, 0x0c}, 1138c2ecf20Sopenharmony_ci {0x79, 0x80}, 1148c2ecf20Sopenharmony_ci {0x7f, 0x14}, 1158c2ecf20Sopenharmony_ci {0x7c, 0x00}, 1168c2ecf20Sopenharmony_ci {0xae, 0x82}, 1178c2ecf20Sopenharmony_ci {0x80, 0x64}, 1188c2ecf20Sopenharmony_ci {0x81, 0x66}, 1198c2ecf20Sopenharmony_ci {0x82, 0x44}, 1208c2ecf20Sopenharmony_ci {0x85, 0x04}, 1218c2ecf20Sopenharmony_ci {0xcd, 0xf4}, 1228c2ecf20Sopenharmony_ci {0x90, 0x33}, 1238c2ecf20Sopenharmony_ci {0xa0, 0x44}, 1248c2ecf20Sopenharmony_ci {0xc0, 0x08}, 1258c2ecf20Sopenharmony_ci {0xc3, 0x10}, 1268c2ecf20Sopenharmony_ci {0xc4, 0x08}, 1278c2ecf20Sopenharmony_ci {0xc5, 0xf0}, 1288c2ecf20Sopenharmony_ci {0xc6, 0xff}, 1298c2ecf20Sopenharmony_ci {0xc7, 0x00}, 1308c2ecf20Sopenharmony_ci {0xc8, 0x1a}, 1318c2ecf20Sopenharmony_ci {0xc9, 0x80}, 1328c2ecf20Sopenharmony_ci {0xe0, 0xf8}, 1338c2ecf20Sopenharmony_ci {0xe6, 0x8b}, 1348c2ecf20Sopenharmony_ci {0xd0, 0x40}, 1358c2ecf20Sopenharmony_ci {0xf8, 0x20}, 1368c2ecf20Sopenharmony_ci {0xfa, 0x0f}, 1378c2ecf20Sopenharmony_ci {0x00, 0x00}, 1388c2ecf20Sopenharmony_ci {0xbd, 0x01}, 1398c2ecf20Sopenharmony_ci {0xb8, 0x00}, 1408c2ecf20Sopenharmony_ci}; 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_cistatic const struct m88ds3103_reg_val m88ds3103_dvbs2_init_reg_vals[] = { 1438c2ecf20Sopenharmony_ci {0x23, 0x07}, 1448c2ecf20Sopenharmony_ci {0x08, 0x07}, 1458c2ecf20Sopenharmony_ci {0x0c, 0x02}, 1468c2ecf20Sopenharmony_ci {0x21, 0x54}, 1478c2ecf20Sopenharmony_ci {0x25, 0x8a}, 1488c2ecf20Sopenharmony_ci {0x27, 0x31}, 1498c2ecf20Sopenharmony_ci {0x30, 0x08}, 1508c2ecf20Sopenharmony_ci {0x32, 0x32}, 1518c2ecf20Sopenharmony_ci {0x35, 0xff}, 1528c2ecf20Sopenharmony_ci {0x3a, 0x00}, 1538c2ecf20Sopenharmony_ci {0x37, 0x10}, 1548c2ecf20Sopenharmony_ci {0x38, 0x10}, 1558c2ecf20Sopenharmony_ci {0x39, 0x02}, 1568c2ecf20Sopenharmony_ci {0x42, 0x60}, 1578c2ecf20Sopenharmony_ci {0x4a, 0x80}, 1588c2ecf20Sopenharmony_ci {0x4b, 0x04}, 1598c2ecf20Sopenharmony_ci {0x4d, 0x91}, 1608c2ecf20Sopenharmony_ci {0x5d, 0xc8}, 1618c2ecf20Sopenharmony_ci {0x50, 0x36}, 1628c2ecf20Sopenharmony_ci {0x51, 0x36}, 1638c2ecf20Sopenharmony_ci {0x52, 0x36}, 1648c2ecf20Sopenharmony_ci {0x53, 0x36}, 1658c2ecf20Sopenharmony_ci {0x56, 0x01}, 1668c2ecf20Sopenharmony_ci {0x63, 0x0f}, 1678c2ecf20Sopenharmony_ci {0x64, 0x10}, 1688c2ecf20Sopenharmony_ci {0x65, 0x20}, 1698c2ecf20Sopenharmony_ci {0x68, 0x46}, 1708c2ecf20Sopenharmony_ci {0x69, 0xcd}, 1718c2ecf20Sopenharmony_ci {0x70, 0x20}, 1728c2ecf20Sopenharmony_ci {0x71, 0x70}, 1738c2ecf20Sopenharmony_ci {0x72, 0x04}, 1748c2ecf20Sopenharmony_ci {0x73, 0x00}, 1758c2ecf20Sopenharmony_ci {0x70, 0x40}, 1768c2ecf20Sopenharmony_ci {0x71, 0x70}, 1778c2ecf20Sopenharmony_ci {0x72, 0x04}, 1788c2ecf20Sopenharmony_ci {0x73, 0x00}, 1798c2ecf20Sopenharmony_ci {0x70, 0x60}, 1808c2ecf20Sopenharmony_ci {0x71, 0x70}, 1818c2ecf20Sopenharmony_ci {0x72, 0x04}, 1828c2ecf20Sopenharmony_ci {0x73, 0x00}, 1838c2ecf20Sopenharmony_ci {0x70, 0x80}, 1848c2ecf20Sopenharmony_ci {0x71, 0x70}, 1858c2ecf20Sopenharmony_ci {0x72, 0x04}, 1868c2ecf20Sopenharmony_ci {0x73, 0x00}, 1878c2ecf20Sopenharmony_ci {0x70, 0xa0}, 1888c2ecf20Sopenharmony_ci {0x71, 0x70}, 1898c2ecf20Sopenharmony_ci {0x72, 0x04}, 1908c2ecf20Sopenharmony_ci {0x73, 0x00}, 1918c2ecf20Sopenharmony_ci {0x70, 0x1f}, 1928c2ecf20Sopenharmony_ci {0x76, 0x38}, 1938c2ecf20Sopenharmony_ci {0x77, 0xa6}, 1948c2ecf20Sopenharmony_ci {0x78, 0x0c}, 1958c2ecf20Sopenharmony_ci {0x79, 0x80}, 1968c2ecf20Sopenharmony_ci {0x7f, 0x14}, 1978c2ecf20Sopenharmony_ci {0x85, 0x08}, 1988c2ecf20Sopenharmony_ci {0xcd, 0xf4}, 1998c2ecf20Sopenharmony_ci {0x90, 0x33}, 2008c2ecf20Sopenharmony_ci {0x86, 0x00}, 2018c2ecf20Sopenharmony_ci {0x87, 0x0f}, 2028c2ecf20Sopenharmony_ci {0x89, 0x00}, 2038c2ecf20Sopenharmony_ci {0x8b, 0x44}, 2048c2ecf20Sopenharmony_ci {0x8c, 0x66}, 2058c2ecf20Sopenharmony_ci {0x9d, 0xc1}, 2068c2ecf20Sopenharmony_ci {0x8a, 0x10}, 2078c2ecf20Sopenharmony_ci {0xad, 0x40}, 2088c2ecf20Sopenharmony_ci {0xa0, 0x44}, 2098c2ecf20Sopenharmony_ci {0xc0, 0x08}, 2108c2ecf20Sopenharmony_ci {0xc1, 0x10}, 2118c2ecf20Sopenharmony_ci {0xc2, 0x08}, 2128c2ecf20Sopenharmony_ci {0xc3, 0x10}, 2138c2ecf20Sopenharmony_ci {0xc4, 0x08}, 2148c2ecf20Sopenharmony_ci {0xc5, 0xf0}, 2158c2ecf20Sopenharmony_ci {0xc6, 0xff}, 2168c2ecf20Sopenharmony_ci {0xc7, 0x00}, 2178c2ecf20Sopenharmony_ci {0xc8, 0x1a}, 2188c2ecf20Sopenharmony_ci {0xc9, 0x80}, 2198c2ecf20Sopenharmony_ci {0xca, 0x23}, 2208c2ecf20Sopenharmony_ci {0xcb, 0x24}, 2218c2ecf20Sopenharmony_ci {0xcc, 0xf4}, 2228c2ecf20Sopenharmony_ci {0xce, 0x74}, 2238c2ecf20Sopenharmony_ci {0x00, 0x00}, 2248c2ecf20Sopenharmony_ci {0xbd, 0x01}, 2258c2ecf20Sopenharmony_ci {0xb8, 0x00}, 2268c2ecf20Sopenharmony_ci}; 2278c2ecf20Sopenharmony_ci 2288c2ecf20Sopenharmony_cistatic const struct m88ds3103_reg_val m88rs6000_dvbs_init_reg_vals[] = { 2298c2ecf20Sopenharmony_ci {0x23, 0x07}, 2308c2ecf20Sopenharmony_ci {0x08, 0x03}, 2318c2ecf20Sopenharmony_ci {0x0c, 0x02}, 2328c2ecf20Sopenharmony_ci {0x20, 0x00}, 2338c2ecf20Sopenharmony_ci {0x21, 0x54}, 2348c2ecf20Sopenharmony_ci {0x25, 0x82}, 2358c2ecf20Sopenharmony_ci {0x27, 0x31}, 2368c2ecf20Sopenharmony_ci {0x30, 0x08}, 2378c2ecf20Sopenharmony_ci {0x31, 0x40}, 2388c2ecf20Sopenharmony_ci {0x32, 0x32}, 2398c2ecf20Sopenharmony_ci {0x33, 0x35}, 2408c2ecf20Sopenharmony_ci {0x35, 0xff}, 2418c2ecf20Sopenharmony_ci {0x3a, 0x00}, 2428c2ecf20Sopenharmony_ci {0x37, 0x10}, 2438c2ecf20Sopenharmony_ci {0x38, 0x10}, 2448c2ecf20Sopenharmony_ci {0x39, 0x02}, 2458c2ecf20Sopenharmony_ci {0x42, 0x60}, 2468c2ecf20Sopenharmony_ci {0x4a, 0x80}, 2478c2ecf20Sopenharmony_ci {0x4b, 0x04}, 2488c2ecf20Sopenharmony_ci {0x4d, 0x91}, 2498c2ecf20Sopenharmony_ci {0x5d, 0xc8}, 2508c2ecf20Sopenharmony_ci {0x50, 0x36}, 2518c2ecf20Sopenharmony_ci {0x51, 0x36}, 2528c2ecf20Sopenharmony_ci {0x52, 0x36}, 2538c2ecf20Sopenharmony_ci {0x53, 0x36}, 2548c2ecf20Sopenharmony_ci {0x63, 0x0f}, 2558c2ecf20Sopenharmony_ci {0x64, 0x30}, 2568c2ecf20Sopenharmony_ci {0x65, 0x40}, 2578c2ecf20Sopenharmony_ci {0x68, 0x26}, 2588c2ecf20Sopenharmony_ci {0x69, 0x4c}, 2598c2ecf20Sopenharmony_ci {0x70, 0x20}, 2608c2ecf20Sopenharmony_ci {0x71, 0x70}, 2618c2ecf20Sopenharmony_ci {0x72, 0x04}, 2628c2ecf20Sopenharmony_ci {0x73, 0x00}, 2638c2ecf20Sopenharmony_ci {0x70, 0x40}, 2648c2ecf20Sopenharmony_ci {0x71, 0x70}, 2658c2ecf20Sopenharmony_ci {0x72, 0x04}, 2668c2ecf20Sopenharmony_ci {0x73, 0x00}, 2678c2ecf20Sopenharmony_ci {0x70, 0x60}, 2688c2ecf20Sopenharmony_ci {0x71, 0x70}, 2698c2ecf20Sopenharmony_ci {0x72, 0x04}, 2708c2ecf20Sopenharmony_ci {0x73, 0x00}, 2718c2ecf20Sopenharmony_ci {0x70, 0x80}, 2728c2ecf20Sopenharmony_ci {0x71, 0x70}, 2738c2ecf20Sopenharmony_ci {0x72, 0x04}, 2748c2ecf20Sopenharmony_ci {0x73, 0x00}, 2758c2ecf20Sopenharmony_ci {0x70, 0xa0}, 2768c2ecf20Sopenharmony_ci {0x71, 0x70}, 2778c2ecf20Sopenharmony_ci {0x72, 0x04}, 2788c2ecf20Sopenharmony_ci {0x73, 0x00}, 2798c2ecf20Sopenharmony_ci {0x70, 0x1f}, 2808c2ecf20Sopenharmony_ci {0x76, 0x38}, 2818c2ecf20Sopenharmony_ci {0x77, 0xa6}, 2828c2ecf20Sopenharmony_ci {0x78, 0x0c}, 2838c2ecf20Sopenharmony_ci {0x79, 0x80}, 2848c2ecf20Sopenharmony_ci {0x7f, 0x14}, 2858c2ecf20Sopenharmony_ci {0x7c, 0x00}, 2868c2ecf20Sopenharmony_ci {0xae, 0x82}, 2878c2ecf20Sopenharmony_ci {0x80, 0x64}, 2888c2ecf20Sopenharmony_ci {0x81, 0x66}, 2898c2ecf20Sopenharmony_ci {0x82, 0x44}, 2908c2ecf20Sopenharmony_ci {0x85, 0x04}, 2918c2ecf20Sopenharmony_ci {0xcd, 0xf4}, 2928c2ecf20Sopenharmony_ci {0x90, 0x33}, 2938c2ecf20Sopenharmony_ci {0xa0, 0x44}, 2948c2ecf20Sopenharmony_ci {0xbe, 0x00}, 2958c2ecf20Sopenharmony_ci {0xc0, 0x08}, 2968c2ecf20Sopenharmony_ci {0xc3, 0x10}, 2978c2ecf20Sopenharmony_ci {0xc4, 0x08}, 2988c2ecf20Sopenharmony_ci {0xc5, 0xf0}, 2998c2ecf20Sopenharmony_ci {0xc6, 0xff}, 3008c2ecf20Sopenharmony_ci {0xc7, 0x00}, 3018c2ecf20Sopenharmony_ci {0xc8, 0x1a}, 3028c2ecf20Sopenharmony_ci {0xc9, 0x80}, 3038c2ecf20Sopenharmony_ci {0xe0, 0xf8}, 3048c2ecf20Sopenharmony_ci {0xe6, 0x8b}, 3058c2ecf20Sopenharmony_ci {0xd0, 0x40}, 3068c2ecf20Sopenharmony_ci {0xf8, 0x20}, 3078c2ecf20Sopenharmony_ci {0xfa, 0x0f}, 3088c2ecf20Sopenharmony_ci {0x00, 0x00}, 3098c2ecf20Sopenharmony_ci {0xbd, 0x01}, 3108c2ecf20Sopenharmony_ci {0xb8, 0x00}, 3118c2ecf20Sopenharmony_ci {0x29, 0x11}, 3128c2ecf20Sopenharmony_ci}; 3138c2ecf20Sopenharmony_ci 3148c2ecf20Sopenharmony_cistatic const struct m88ds3103_reg_val m88rs6000_dvbs2_init_reg_vals[] = { 3158c2ecf20Sopenharmony_ci {0x23, 0x07}, 3168c2ecf20Sopenharmony_ci {0x08, 0x07}, 3178c2ecf20Sopenharmony_ci {0x0c, 0x02}, 3188c2ecf20Sopenharmony_ci {0x20, 0x00}, 3198c2ecf20Sopenharmony_ci {0x21, 0x54}, 3208c2ecf20Sopenharmony_ci {0x25, 0x82}, 3218c2ecf20Sopenharmony_ci {0x27, 0x31}, 3228c2ecf20Sopenharmony_ci {0x30, 0x08}, 3238c2ecf20Sopenharmony_ci {0x32, 0x32}, 3248c2ecf20Sopenharmony_ci {0x33, 0x35}, 3258c2ecf20Sopenharmony_ci {0x35, 0xff}, 3268c2ecf20Sopenharmony_ci {0x3a, 0x00}, 3278c2ecf20Sopenharmony_ci {0x37, 0x10}, 3288c2ecf20Sopenharmony_ci {0x38, 0x10}, 3298c2ecf20Sopenharmony_ci {0x39, 0x02}, 3308c2ecf20Sopenharmony_ci {0x42, 0x60}, 3318c2ecf20Sopenharmony_ci {0x4a, 0x80}, 3328c2ecf20Sopenharmony_ci {0x4b, 0x04}, 3338c2ecf20Sopenharmony_ci {0x4d, 0x91}, 3348c2ecf20Sopenharmony_ci {0x5d, 0xc8}, 3358c2ecf20Sopenharmony_ci {0x50, 0x36}, 3368c2ecf20Sopenharmony_ci {0x51, 0x36}, 3378c2ecf20Sopenharmony_ci {0x52, 0x36}, 3388c2ecf20Sopenharmony_ci {0x53, 0x36}, 3398c2ecf20Sopenharmony_ci {0x63, 0x0f}, 3408c2ecf20Sopenharmony_ci {0x64, 0x10}, 3418c2ecf20Sopenharmony_ci {0x65, 0x20}, 3428c2ecf20Sopenharmony_ci {0x68, 0x46}, 3438c2ecf20Sopenharmony_ci {0x69, 0xcd}, 3448c2ecf20Sopenharmony_ci {0x70, 0x20}, 3458c2ecf20Sopenharmony_ci {0x71, 0x70}, 3468c2ecf20Sopenharmony_ci {0x72, 0x04}, 3478c2ecf20Sopenharmony_ci {0x73, 0x00}, 3488c2ecf20Sopenharmony_ci {0x70, 0x40}, 3498c2ecf20Sopenharmony_ci {0x71, 0x70}, 3508c2ecf20Sopenharmony_ci {0x72, 0x04}, 3518c2ecf20Sopenharmony_ci {0x73, 0x00}, 3528c2ecf20Sopenharmony_ci {0x70, 0x60}, 3538c2ecf20Sopenharmony_ci {0x71, 0x70}, 3548c2ecf20Sopenharmony_ci {0x72, 0x04}, 3558c2ecf20Sopenharmony_ci {0x73, 0x00}, 3568c2ecf20Sopenharmony_ci {0x70, 0x80}, 3578c2ecf20Sopenharmony_ci {0x71, 0x70}, 3588c2ecf20Sopenharmony_ci {0x72, 0x04}, 3598c2ecf20Sopenharmony_ci {0x73, 0x00}, 3608c2ecf20Sopenharmony_ci {0x70, 0xa0}, 3618c2ecf20Sopenharmony_ci {0x71, 0x70}, 3628c2ecf20Sopenharmony_ci {0x72, 0x04}, 3638c2ecf20Sopenharmony_ci {0x73, 0x00}, 3648c2ecf20Sopenharmony_ci {0x70, 0x1f}, 3658c2ecf20Sopenharmony_ci {0x76, 0x38}, 3668c2ecf20Sopenharmony_ci {0x77, 0xa6}, 3678c2ecf20Sopenharmony_ci {0x78, 0x0c}, 3688c2ecf20Sopenharmony_ci {0x79, 0x80}, 3698c2ecf20Sopenharmony_ci {0x7f, 0x14}, 3708c2ecf20Sopenharmony_ci {0x85, 0x08}, 3718c2ecf20Sopenharmony_ci {0xcd, 0xf4}, 3728c2ecf20Sopenharmony_ci {0x90, 0x33}, 3738c2ecf20Sopenharmony_ci {0x86, 0x00}, 3748c2ecf20Sopenharmony_ci {0x87, 0x0f}, 3758c2ecf20Sopenharmony_ci {0x89, 0x00}, 3768c2ecf20Sopenharmony_ci {0x8b, 0x44}, 3778c2ecf20Sopenharmony_ci {0x8c, 0x66}, 3788c2ecf20Sopenharmony_ci {0x9d, 0xc1}, 3798c2ecf20Sopenharmony_ci {0x8a, 0x10}, 3808c2ecf20Sopenharmony_ci {0xad, 0x40}, 3818c2ecf20Sopenharmony_ci {0xa0, 0x44}, 3828c2ecf20Sopenharmony_ci {0xbe, 0x00}, 3838c2ecf20Sopenharmony_ci {0xc0, 0x08}, 3848c2ecf20Sopenharmony_ci {0xc1, 0x10}, 3858c2ecf20Sopenharmony_ci {0xc2, 0x08}, 3868c2ecf20Sopenharmony_ci {0xc3, 0x10}, 3878c2ecf20Sopenharmony_ci {0xc4, 0x08}, 3888c2ecf20Sopenharmony_ci {0xc5, 0xf0}, 3898c2ecf20Sopenharmony_ci {0xc6, 0xff}, 3908c2ecf20Sopenharmony_ci {0xc7, 0x00}, 3918c2ecf20Sopenharmony_ci {0xc8, 0x1a}, 3928c2ecf20Sopenharmony_ci {0xc9, 0x80}, 3938c2ecf20Sopenharmony_ci {0xca, 0x23}, 3948c2ecf20Sopenharmony_ci {0xcb, 0x24}, 3958c2ecf20Sopenharmony_ci {0xcc, 0xf4}, 3968c2ecf20Sopenharmony_ci {0xce, 0x74}, 3978c2ecf20Sopenharmony_ci {0x00, 0x00}, 3988c2ecf20Sopenharmony_ci {0xbd, 0x01}, 3998c2ecf20Sopenharmony_ci {0xb8, 0x00}, 4008c2ecf20Sopenharmony_ci {0x29, 0x01}, 4018c2ecf20Sopenharmony_ci}; 4028c2ecf20Sopenharmony_ci#endif 403