1*47d7953dSKaustabh Chakraborty // SPDX-License-Identifier: GPL-2.0-only 2*47d7953dSKaustabh Chakraborty /* 3*47d7953dSKaustabh Chakraborty * Samsung AMS561RA01 panel with S6E8AA5X01 controller. 4*47d7953dSKaustabh Chakraborty * 5*47d7953dSKaustabh Chakraborty * Copyright (C) 2025 Kaustabh Chakraborty <kauschluss@disroot.org> 6*47d7953dSKaustabh Chakraborty */ 7*47d7953dSKaustabh Chakraborty 8*47d7953dSKaustabh Chakraborty #include <linux/backlight.h> 9*47d7953dSKaustabh Chakraborty #include <linux/gpio/consumer.h> 10*47d7953dSKaustabh Chakraborty #include <linux/module.h> 11*47d7953dSKaustabh Chakraborty #include <linux/of.h> 12*47d7953dSKaustabh Chakraborty #include <linux/regulator/consumer.h> 13*47d7953dSKaustabh Chakraborty 14*47d7953dSKaustabh Chakraborty #include <drm/drm_mipi_dsi.h> 15*47d7953dSKaustabh Chakraborty #include <drm/drm_modes.h> 16*47d7953dSKaustabh Chakraborty #include <drm/drm_panel.h> 17*47d7953dSKaustabh Chakraborty #include <drm/drm_probe_helper.h> 18*47d7953dSKaustabh Chakraborty 19*47d7953dSKaustabh Chakraborty /* Manufacturer Command Set */ 20*47d7953dSKaustabh Chakraborty #define MCS_AIDCTL 0xb2 21*47d7953dSKaustabh Chakraborty #define MCS_ADAPTIVECTL 0xb5 22*47d7953dSKaustabh Chakraborty #define MCS_ELVSS 0xb6 23*47d7953dSKaustabh Chakraborty #define MCS_TEMPERCTL 0xb8 24*47d7953dSKaustabh Chakraborty #define MCS_PENTILE 0xc0 25*47d7953dSKaustabh Chakraborty #define MCS_GAMMACTL 0xca 26*47d7953dSKaustabh Chakraborty #define MCS_LTPSCTL 0xcb 27*47d7953dSKaustabh Chakraborty #define MCS_PCD 0xcc 28*47d7953dSKaustabh Chakraborty #define MCS_ERRFLAG 0xe7 29*47d7953dSKaustabh Chakraborty #define MCS_ACCESSPROT 0xf0 30*47d7953dSKaustabh Chakraborty #define MCS_DISPCTL 0xf2 31*47d7953dSKaustabh Chakraborty #define MCS_GAMMAUPD 0xf7 32*47d7953dSKaustabh Chakraborty 33*47d7953dSKaustabh Chakraborty #define GAMMA_CMD_LEN 34 34*47d7953dSKaustabh Chakraborty #define AID_CMD_LEN 3 35*47d7953dSKaustabh Chakraborty 36*47d7953dSKaustabh Chakraborty static const struct { 37*47d7953dSKaustabh Chakraborty u8 gamma[GAMMA_CMD_LEN]; 38*47d7953dSKaustabh Chakraborty u8 aid[AID_CMD_LEN]; 39*47d7953dSKaustabh Chakraborty } s6e8aa5x01_ams561ra01_cmds[] = { 40*47d7953dSKaustabh Chakraborty { 41*47d7953dSKaustabh Chakraborty /* 5 nits */ 42*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 43*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x94, 44*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8a, 0x87, 0x87, 0x89, 45*47d7953dSKaustabh Chakraborty 0x8d, 0x8c, 0x8d, 0x89, 0x8c, 0x8e, 46*47d7953dSKaustabh Chakraborty 0x8e, 0x8f, 0x90, 0xa3, 0xa2, 0x9a, 47*47d7953dSKaustabh Chakraborty 0xcf, 0xca, 0x9f, 0xe6, 0xff, 0xb4, 48*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 49*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0xa5 }, 50*47d7953dSKaustabh Chakraborty }, { 51*47d7953dSKaustabh Chakraborty /* 6 nits */ 52*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 53*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x95, 54*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x87, 0x87, 0x89, 55*47d7953dSKaustabh Chakraborty 0x8c, 0x8a, 0x8c, 0x85, 0x88, 0x8c, 56*47d7953dSKaustabh Chakraborty 0x8b, 0x8c, 0x8e, 0xa2, 0xa2, 0x9a, 57*47d7953dSKaustabh Chakraborty 0xd0, 0xcc, 0xa2, 0xed, 0xff, 0xb7, 58*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 59*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0x95 }, 60*47d7953dSKaustabh Chakraborty }, { 61*47d7953dSKaustabh Chakraborty /* 7 nits */ 62*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 63*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x95, 64*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x87, 0x87, 0x89, 65*47d7953dSKaustabh Chakraborty 0x8c, 0x8a, 0x8c, 0x85, 0x88, 0x8c, 66*47d7953dSKaustabh Chakraborty 0x8b, 0x8c, 0x8e, 0xa2, 0xa2, 0x99, 67*47d7953dSKaustabh Chakraborty 0xc8, 0xc4, 0x9d, 0xed, 0xff, 0xb7, 68*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 69*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0x89 }, 70*47d7953dSKaustabh Chakraborty }, { 71*47d7953dSKaustabh Chakraborty /* 8 nits */ 72*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 73*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x96, 74*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8a, 0x87, 0x87, 0x89, 75*47d7953dSKaustabh Chakraborty 0x8a, 0x88, 0x8b, 0x83, 0x86, 0x8b, 76*47d7953dSKaustabh Chakraborty 0x8c, 0x8b, 0x8d, 0x9d, 0x9f, 0x97, 77*47d7953dSKaustabh Chakraborty 0xc7, 0xc3, 0x9c, 0xf5, 0xff, 0xbb, 78*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 79*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0x7e }, 80*47d7953dSKaustabh Chakraborty }, { 81*47d7953dSKaustabh Chakraborty /* 9 nits */ 82*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 83*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x96, 84*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8a, 0x87, 0x87, 0x89, 85*47d7953dSKaustabh Chakraborty 0x89, 0x86, 0x8a, 0x82, 0x84, 0x88, 86*47d7953dSKaustabh Chakraborty 0x90, 0x8f, 0x91, 0x95, 0x97, 0x94, 87*47d7953dSKaustabh Chakraborty 0xc6, 0xc2, 0x9d, 0xf5, 0xff, 0xbb, 88*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 89*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0x73 }, 90*47d7953dSKaustabh Chakraborty }, { 91*47d7953dSKaustabh Chakraborty /* 10 nits */ 92*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 93*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x96, 94*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8a, 0x87, 0x87, 0x89, 95*47d7953dSKaustabh Chakraborty 0x89, 0x86, 0x8a, 0x82, 0x84, 0x88, 96*47d7953dSKaustabh Chakraborty 0x90, 0x8f, 0x91, 0x94, 0x97, 0x93, 97*47d7953dSKaustabh Chakraborty 0xc6, 0xc2, 0x9e, 0xec, 0xff, 0xb7, 98*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 99*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0x67 }, 100*47d7953dSKaustabh Chakraborty }, { 101*47d7953dSKaustabh Chakraborty /* 11 nits */ 102*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 103*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x96, 104*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8a, 0x87, 0x87, 0x89, 105*47d7953dSKaustabh Chakraborty 0x89, 0x86, 0x8a, 0x82, 0x84, 0x88, 106*47d7953dSKaustabh Chakraborty 0x8b, 0x8b, 0x8d, 0x90, 0x93, 0x92, 107*47d7953dSKaustabh Chakraborty 0xc5, 0xc1, 0x9c, 0xf5, 0xff, 0xbb, 108*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 109*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0x56 }, 110*47d7953dSKaustabh Chakraborty }, { 111*47d7953dSKaustabh Chakraborty /* 12 nits */ 112*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 113*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x96, 114*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x87, 0x87, 0x89, 115*47d7953dSKaustabh Chakraborty 0x89, 0x86, 0x89, 0x82, 0x84, 0x88, 116*47d7953dSKaustabh Chakraborty 0x87, 0x86, 0x8a, 0x8c, 0x90, 0x8f, 117*47d7953dSKaustabh Chakraborty 0xcd, 0xc9, 0xa1, 0xec, 0xff, 0xb7, 118*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 119*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0x4a }, 120*47d7953dSKaustabh Chakraborty }, { 121*47d7953dSKaustabh Chakraborty /* 13 nits */ 122*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 123*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x96, 124*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x87, 0x87, 0x89, 125*47d7953dSKaustabh Chakraborty 0x89, 0x86, 0x89, 0x82, 0x84, 0x88, 126*47d7953dSKaustabh Chakraborty 0x87, 0x86, 0x8a, 0x8c, 0x90, 0x8e, 127*47d7953dSKaustabh Chakraborty 0xc4, 0xbf, 0x9c, 0xf5, 0xff, 0xbb, 128*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 129*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0x3b }, 130*47d7953dSKaustabh Chakraborty }, { 131*47d7953dSKaustabh Chakraborty /* 14 nits */ 132*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 133*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x96, 134*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x87, 0x87, 0x89, 135*47d7953dSKaustabh Chakraborty 0x89, 0x86, 0x89, 0x82, 0x84, 0x88, 136*47d7953dSKaustabh Chakraborty 0x87, 0x86, 0x89, 0x8c, 0x90, 0x8f, 137*47d7953dSKaustabh Chakraborty 0xc2, 0xbf, 0x9c, 0xec, 0xff, 0xb7, 138*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 139*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0x35 }, 140*47d7953dSKaustabh Chakraborty }, { 141*47d7953dSKaustabh Chakraborty /* 15 nits */ 142*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 143*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x96, 144*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x87, 0x87, 0x89, 145*47d7953dSKaustabh Chakraborty 0x89, 0x86, 0x89, 0x82, 0x84, 0x88, 146*47d7953dSKaustabh Chakraborty 0x87, 0x86, 0x89, 0x8c, 0x90, 0x8f, 147*47d7953dSKaustabh Chakraborty 0xb7, 0xb6, 0x96, 0xec, 0xff, 0xb7, 148*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 149*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0x25 }, 150*47d7953dSKaustabh Chakraborty }, { 151*47d7953dSKaustabh Chakraborty /* 16 nits */ 152*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 153*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x96, 154*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x87, 0x87, 0x89, 155*47d7953dSKaustabh Chakraborty 0x89, 0x86, 0x89, 0x82, 0x84, 0x88, 156*47d7953dSKaustabh Chakraborty 0x88, 0x86, 0x89, 0x8c, 0x90, 0x8f, 157*47d7953dSKaustabh Chakraborty 0xb7, 0xb6, 0x96, 0xec, 0xff, 0xb7, 158*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 159*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0x20 }, 160*47d7953dSKaustabh Chakraborty }, { 161*47d7953dSKaustabh Chakraborty /* 17 nits */ 162*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 163*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x96, 164*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x87, 0x87, 0x89, 165*47d7953dSKaustabh Chakraborty 0x89, 0x86, 0x89, 0x7f, 0x80, 0x86, 166*47d7953dSKaustabh Chakraborty 0x86, 0x85, 0x89, 0x88, 0x8c, 0x8e, 167*47d7953dSKaustabh Chakraborty 0xbf, 0xbe, 0x9c, 0xec, 0xff, 0xb7, 168*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 169*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x05, 0x11 }, 170*47d7953dSKaustabh Chakraborty }, { 171*47d7953dSKaustabh Chakraborty /* 19 nits */ 172*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 173*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x96, 174*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x87, 0x87, 0x89, 175*47d7953dSKaustabh Chakraborty 0x89, 0x86, 0x89, 0x7f, 0x80, 0x86, 176*47d7953dSKaustabh Chakraborty 0x87, 0x85, 0x89, 0x88, 0x8c, 0x8e, 177*47d7953dSKaustabh Chakraborty 0xb3, 0xb4, 0x97, 0xeb, 0xff, 0xb7, 178*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 179*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x04, 0xf2 }, 180*47d7953dSKaustabh Chakraborty }, { 181*47d7953dSKaustabh Chakraborty /* 20 nits */ 182*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 183*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x95, 184*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x87, 0x87, 0x89, 185*47d7953dSKaustabh Chakraborty 0x89, 0x86, 0x89, 0x7f, 0x80, 0x86, 186*47d7953dSKaustabh Chakraborty 0x87, 0x85, 0x89, 0x89, 0x8c, 0x8e, 187*47d7953dSKaustabh Chakraborty 0xb3, 0xb4, 0x97, 0xeb, 0xff, 0xb7, 188*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 189*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x04, 0xe4 }, 190*47d7953dSKaustabh Chakraborty }, { 191*47d7953dSKaustabh Chakraborty /* 21 nits */ 192*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 193*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x96, 194*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x87, 0x87, 0x89, 195*47d7953dSKaustabh Chakraborty 0x8a, 0x88, 0x8b, 0x7d, 0x7e, 0x84, 196*47d7953dSKaustabh Chakraborty 0x8c, 0x8a, 0x8c, 0x8e, 0x90, 0x8f, 197*47d7953dSKaustabh Chakraborty 0xb6, 0xb6, 0x97, 0xe3, 0xff, 0xb3, 198*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 199*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x04, 0xd5 }, 200*47d7953dSKaustabh Chakraborty }, { 201*47d7953dSKaustabh Chakraborty /* 22 nits */ 202*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 203*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x97, 204*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x87, 0x87, 0x89, 205*47d7953dSKaustabh Chakraborty 0x8a, 0x88, 0x8b, 0x81, 0x82, 0x86, 206*47d7953dSKaustabh Chakraborty 0x87, 0x86, 0x88, 0x8e, 0x90, 0x8f, 207*47d7953dSKaustabh Chakraborty 0xb6, 0xb6, 0x95, 0xe3, 0xff, 0xb3, 208*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 209*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x04, 0xc5 }, 210*47d7953dSKaustabh Chakraborty }, { 211*47d7953dSKaustabh Chakraborty /* 24 nits */ 212*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 213*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x97, 214*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x88, 0x88, 0x8a, 215*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8a, 0x81, 0x82, 0x86, 216*47d7953dSKaustabh Chakraborty 0x87, 0x86, 0x88, 0x8e, 0x90, 0x8f, 217*47d7953dSKaustabh Chakraborty 0xb6, 0xb6, 0x94, 0xe3, 0xff, 0xb3, 218*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 219*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x04, 0xa7 }, 220*47d7953dSKaustabh Chakraborty }, { 221*47d7953dSKaustabh Chakraborty /* 25 nits */ 222*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 223*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x98, 224*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x88, 0x88, 0x8a, 225*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8a, 0x81, 0x82, 0x86, 226*47d7953dSKaustabh Chakraborty 0x87, 0x86, 0x87, 0x8e, 0x90, 0x8f, 227*47d7953dSKaustabh Chakraborty 0xbf, 0xbf, 0x9a, 0xda, 0xfa, 0xaf, 228*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 229*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x04, 0x95 }, 230*47d7953dSKaustabh Chakraborty }, { 231*47d7953dSKaustabh Chakraborty /* 27 nits */ 232*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 233*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x99, 234*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x88, 0x88, 0x8a, 235*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8a, 0x83, 0x86, 0x8a, 236*47d7953dSKaustabh Chakraborty 0x88, 0x87, 0x87, 0x88, 0x8b, 0x8c, 237*47d7953dSKaustabh Chakraborty 0xbf, 0xbf, 0x9a, 0xda, 0xfa, 0xaf, 238*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 239*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x04, 0x76 }, 240*47d7953dSKaustabh Chakraborty }, { 241*47d7953dSKaustabh Chakraborty /* 29 nits */ 242*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 243*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x99, 244*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x88, 0x88, 0x8a, 245*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8b, 0x83, 0x86, 0x89, 246*47d7953dSKaustabh Chakraborty 0x88, 0x87, 0x88, 0x88, 0x8b, 0x8b, 247*47d7953dSKaustabh Chakraborty 0xbf, 0xbf, 0x9a, 0xda, 0xfa, 0xaf, 248*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 249*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x04, 0x54 }, 250*47d7953dSKaustabh Chakraborty }, { 251*47d7953dSKaustabh Chakraborty /* 30 nits */ 252*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 253*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9a, 254*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x88, 0x88, 0x8a, 255*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8a, 0x84, 0x86, 0x8a, 256*47d7953dSKaustabh Chakraborty 0x87, 0x87, 0x87, 0x88, 0x8b, 0x8b, 257*47d7953dSKaustabh Chakraborty 0xbf, 0xbf, 0x99, 0xda, 0xfa, 0xaf, 258*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 259*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x04, 0x44 }, 260*47d7953dSKaustabh Chakraborty }, { 261*47d7953dSKaustabh Chakraborty /* 32 nits */ 262*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 263*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9a, 264*47d7953dSKaustabh Chakraborty 0x89, 0x89, 0x8c, 0x88, 0x88, 0x8a, 265*47d7953dSKaustabh Chakraborty 0x89, 0x87, 0x8a, 0x84, 0x86, 0x8a, 266*47d7953dSKaustabh Chakraborty 0x87, 0x87, 0x87, 0x89, 0x8b, 0x8b, 267*47d7953dSKaustabh Chakraborty 0xbf, 0xbf, 0x98, 0xd2, 0xf2, 0xac, 268*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 269*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x04, 0x1f }, 270*47d7953dSKaustabh Chakraborty }, { 271*47d7953dSKaustabh Chakraborty /* 34 nits */ 272*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 273*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9b, 274*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8b, 0x88, 0x88, 0x8a, 275*47d7953dSKaustabh Chakraborty 0x8b, 0x87, 0x8b, 0x83, 0x86, 0x89, 276*47d7953dSKaustabh Chakraborty 0x87, 0x87, 0x88, 0x88, 0x8b, 0x8a, 277*47d7953dSKaustabh Chakraborty 0xbf, 0xbf, 0x98, 0xd2, 0xf2, 0xac, 278*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 279*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x03, 0xff }, 280*47d7953dSKaustabh Chakraborty }, { 281*47d7953dSKaustabh Chakraborty /* 37 nits */ 282*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 283*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9b, 284*47d7953dSKaustabh Chakraborty 0x89, 0x89, 0x8c, 0x88, 0x88, 0x8a, 285*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8a, 0x81, 0x82, 0x86, 286*47d7953dSKaustabh Chakraborty 0x86, 0x86, 0x86, 0x8d, 0x90, 0x8d, 287*47d7953dSKaustabh Chakraborty 0xc0, 0xbf, 0x9a, 0xd2, 0xf2, 0xac, 288*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 289*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x03, 0xd3 }, 290*47d7953dSKaustabh Chakraborty }, { 291*47d7953dSKaustabh Chakraborty /* 39 nits */ 292*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 293*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9b, 294*47d7953dSKaustabh Chakraborty 0x89, 0x89, 0x8c, 0x88, 0x88, 0x8a, 295*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8a, 0x81, 0x82, 0x86, 296*47d7953dSKaustabh Chakraborty 0x87, 0x86, 0x87, 0x8d, 0x90, 0x8d, 297*47d7953dSKaustabh Chakraborty 0xb6, 0xb6, 0x93, 0xda, 0xf9, 0xaf, 298*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 299*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x03, 0xb3 }, 300*47d7953dSKaustabh Chakraborty }, { 301*47d7953dSKaustabh Chakraborty /* 41 nits */ 302*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 303*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9b, 304*47d7953dSKaustabh Chakraborty 0x89, 0x89, 0x8c, 0x88, 0x88, 0x8a, 305*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8b, 0x81, 0x82, 0x85, 306*47d7953dSKaustabh Chakraborty 0x87, 0x86, 0x87, 0x8d, 0x90, 0x8d, 307*47d7953dSKaustabh Chakraborty 0xb6, 0xb6, 0x94, 0xda, 0xf9, 0xaf, 308*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 309*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x03, 0x93 }, 310*47d7953dSKaustabh Chakraborty }, { 311*47d7953dSKaustabh Chakraborty /* 44 nits */ 312*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 313*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9b, 314*47d7953dSKaustabh Chakraborty 0x89, 0x89, 0x8c, 0x88, 0x88, 0x8a, 315*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8b, 0x81, 0x82, 0x86, 316*47d7953dSKaustabh Chakraborty 0x87, 0x86, 0x86, 0x85, 0x87, 0x8a, 317*47d7953dSKaustabh Chakraborty 0xbe, 0xbe, 0x99, 0xda, 0xf9, 0xaf, 318*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 319*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x03, 0x66 }, 320*47d7953dSKaustabh Chakraborty }, { 321*47d7953dSKaustabh Chakraborty /* 47 nits */ 322*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 323*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9b, 324*47d7953dSKaustabh Chakraborty 0x89, 0x89, 0x8c, 0x88, 0x88, 0x8a, 325*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8b, 0x81, 0x82, 0x86, 326*47d7953dSKaustabh Chakraborty 0x88, 0x86, 0x87, 0x84, 0x87, 0x89, 327*47d7953dSKaustabh Chakraborty 0xb4, 0xb4, 0x94, 0xe2, 0xff, 0xb3, 328*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 329*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x03, 0x40 }, 330*47d7953dSKaustabh Chakraborty }, { 331*47d7953dSKaustabh Chakraborty /* 50 nits */ 332*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 333*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9c, 334*47d7953dSKaustabh Chakraborty 0x89, 0x89, 0x8b, 0x88, 0x88, 0x8a, 335*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8b, 0x81, 0x82, 0x86, 336*47d7953dSKaustabh Chakraborty 0x88, 0x86, 0x87, 0x84, 0x87, 0x89, 337*47d7953dSKaustabh Chakraborty 0xb4, 0xb4, 0x95, 0xe2, 0xff, 0xb3, 338*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 339*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x03, 0x0e }, 340*47d7953dSKaustabh Chakraborty }, { 341*47d7953dSKaustabh Chakraborty /* 53 nits */ 342*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 343*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9c, 344*47d7953dSKaustabh Chakraborty 0x89, 0x89, 0x8b, 0x88, 0x88, 0x8a, 345*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8b, 0x81, 0x82, 0x86, 346*47d7953dSKaustabh Chakraborty 0x88, 0x86, 0x87, 0x85, 0x87, 0x8a, 347*47d7953dSKaustabh Chakraborty 0xb4, 0xb4, 0x96, 0xe2, 0xff, 0xb3, 348*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 349*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0xe2 }, 350*47d7953dSKaustabh Chakraborty }, { 351*47d7953dSKaustabh Chakraborty /* 56 nits */ 352*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 353*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9c, 354*47d7953dSKaustabh Chakraborty 0x89, 0x89, 0x8b, 0x88, 0x88, 0x8a, 355*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8b, 0x81, 0x82, 0x86, 356*47d7953dSKaustabh Chakraborty 0x88, 0x86, 0x87, 0x85, 0x87, 0x8a, 357*47d7953dSKaustabh Chakraborty 0xab, 0xab, 0x90, 0xdd, 0xf7, 0xaf, 358*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 359*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0xb5 }, 360*47d7953dSKaustabh Chakraborty }, { 361*47d7953dSKaustabh Chakraborty /* 60 nits */ 362*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 363*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9c, 364*47d7953dSKaustabh Chakraborty 0x89, 0x89, 0x8b, 0x88, 0x88, 0x8a, 365*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8b, 0x82, 0x82, 0x87, 366*47d7953dSKaustabh Chakraborty 0x83, 0x81, 0x84, 0x81, 0x84, 0x88, 367*47d7953dSKaustabh Chakraborty 0xb3, 0xb3, 0x96, 0xcf, 0xe5, 0xa8, 368*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 369*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0x77 }, 370*47d7953dSKaustabh Chakraborty }, { 371*47d7953dSKaustabh Chakraborty /* 64 nits */ 372*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 373*47d7953dSKaustabh Chakraborty 0x00, 0x98, 0x00, 0xa4, 0x00, 0x9c, 374*47d7953dSKaustabh Chakraborty 0x89, 0x89, 0x8b, 0x88, 0x88, 0x8a, 375*47d7953dSKaustabh Chakraborty 0x8a, 0x87, 0x8b, 0x82, 0x82, 0x87, 376*47d7953dSKaustabh Chakraborty 0x83, 0x81, 0x84, 0x82, 0x84, 0x88, 377*47d7953dSKaustabh Chakraborty 0xb2, 0xb3, 0x97, 0xcf, 0xe5, 0xa8, 378*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 379*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0x36 }, 380*47d7953dSKaustabh Chakraborty }, { 381*47d7953dSKaustabh Chakraborty /* 68 nits */ 382*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 383*47d7953dSKaustabh Chakraborty 0x00, 0x9b, 0x00, 0xa6, 0x00, 0x9d, 384*47d7953dSKaustabh Chakraborty 0x88, 0x88, 0x89, 0x89, 0x89, 0x8b, 385*47d7953dSKaustabh Chakraborty 0x8a, 0x88, 0x8b, 0x7f, 0x80, 0x86, 386*47d7953dSKaustabh Chakraborty 0x88, 0x86, 0x87, 0x7d, 0x7f, 0x85, 387*47d7953dSKaustabh Chakraborty 0xb2, 0xb3, 0x97, 0xcf, 0xe5, 0xa8, 388*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 389*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0x15 }, 390*47d7953dSKaustabh Chakraborty }, { 391*47d7953dSKaustabh Chakraborty /* 72 nits */ 392*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 393*47d7953dSKaustabh Chakraborty 0x00, 0x9c, 0x00, 0xa9, 0x00, 0xa0, 394*47d7953dSKaustabh Chakraborty 0x88, 0x88, 0x89, 0x88, 0x88, 0x8a, 395*47d7953dSKaustabh Chakraborty 0x8c, 0x8a, 0x8d, 0x7f, 0x81, 0x85, 396*47d7953dSKaustabh Chakraborty 0x84, 0x82, 0x84, 0x85, 0x87, 0x8a, 397*47d7953dSKaustabh Chakraborty 0xaa, 0xab, 0x93, 0xcf, 0xe5, 0xa8, 398*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 399*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0x15 }, 400*47d7953dSKaustabh Chakraborty }, { 401*47d7953dSKaustabh Chakraborty /* 77 nits */ 402*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 403*47d7953dSKaustabh Chakraborty 0x00, 0xa1, 0x00, 0xad, 0x00, 0xa5, 404*47d7953dSKaustabh Chakraborty 0x89, 0x89, 0x8a, 0x88, 0x87, 0x89, 405*47d7953dSKaustabh Chakraborty 0x8c, 0x89, 0x8d, 0x7f, 0x81, 0x85, 406*47d7953dSKaustabh Chakraborty 0x84, 0x83, 0x84, 0x81, 0x83, 0x86, 407*47d7953dSKaustabh Chakraborty 0xaa, 0xab, 0x93, 0xc0, 0xd3, 0xa1, 408*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 409*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0x15 }, 410*47d7953dSKaustabh Chakraborty }, { 411*47d7953dSKaustabh Chakraborty /* 82 nits */ 412*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 413*47d7953dSKaustabh Chakraborty 0x00, 0xa5, 0x00, 0xb0, 0x00, 0xa9, 414*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x89, 0x85, 0x86, 0x89, 415*47d7953dSKaustabh Chakraborty 0x8a, 0x88, 0x8b, 0x82, 0x82, 0x87, 416*47d7953dSKaustabh Chakraborty 0x81, 0x80, 0x82, 0x89, 0x8b, 0x8b, 417*47d7953dSKaustabh Chakraborty 0xa2, 0xa3, 0x8e, 0xc0, 0xd3, 0xa1, 418*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 419*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0x15 }, 420*47d7953dSKaustabh Chakraborty }, { 421*47d7953dSKaustabh Chakraborty /* 87 nits */ 422*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 423*47d7953dSKaustabh Chakraborty 0x00, 0xab, 0x00, 0xb4, 0x00, 0xad, 424*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8a, 0x84, 0x86, 0x88, 425*47d7953dSKaustabh Chakraborty 0x8a, 0x88, 0x8b, 0x7f, 0x7f, 0x84, 426*47d7953dSKaustabh Chakraborty 0x86, 0x84, 0x85, 0x85, 0x86, 0x88, 427*47d7953dSKaustabh Chakraborty 0xa2, 0xa3, 0x8f, 0xc0, 0xd3, 0xa1, 428*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 429*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0x15 }, 430*47d7953dSKaustabh Chakraborty }, { 431*47d7953dSKaustabh Chakraborty /* 93 nits */ 432*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 433*47d7953dSKaustabh Chakraborty 0x00, 0xaf, 0x00, 0xb9, 0x00, 0xb1, 434*47d7953dSKaustabh Chakraborty 0x88, 0x89, 0x8a, 0x84, 0x85, 0x87, 435*47d7953dSKaustabh Chakraborty 0x8a, 0x89, 0x8b, 0x7e, 0x7e, 0x83, 436*47d7953dSKaustabh Chakraborty 0x87, 0x86, 0x86, 0x88, 0x8a, 0x89, 437*47d7953dSKaustabh Chakraborty 0x9c, 0x9c, 0x8b, 0xc0, 0xd3, 0xa1, 438*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 439*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0x15 }, 440*47d7953dSKaustabh Chakraborty }, { 441*47d7953dSKaustabh Chakraborty /* 98 nits */ 442*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 443*47d7953dSKaustabh Chakraborty 0x00, 0xb3, 0x00, 0xbc, 0x00, 0xb5, 444*47d7953dSKaustabh Chakraborty 0x88, 0x88, 0x88, 0x84, 0x84, 0x86, 445*47d7953dSKaustabh Chakraborty 0x8a, 0x88, 0x8a, 0x7f, 0x7f, 0x84, 446*47d7953dSKaustabh Chakraborty 0x84, 0x83, 0x84, 0x88, 0x8a, 0x89, 447*47d7953dSKaustabh Chakraborty 0x9c, 0x9c, 0x8b, 0xc0, 0xd3, 0xa1, 448*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 449*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0x15 }, 450*47d7953dSKaustabh Chakraborty }, { 451*47d7953dSKaustabh Chakraborty /* 105 nits */ 452*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 453*47d7953dSKaustabh Chakraborty 0x00, 0xb7, 0x00, 0xc0, 0x00, 0xba, 454*47d7953dSKaustabh Chakraborty 0x87, 0x87, 0x88, 0x85, 0x85, 0x87, 455*47d7953dSKaustabh Chakraborty 0x89, 0x88, 0x89, 0x7f, 0x7f, 0x83, 456*47d7953dSKaustabh Chakraborty 0x81, 0x80, 0x82, 0x88, 0x8a, 0x89, 457*47d7953dSKaustabh Chakraborty 0x9c, 0x9c, 0x8c, 0xb2, 0xc2, 0x9a, 458*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 459*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0x15 }, 460*47d7953dSKaustabh Chakraborty }, { 461*47d7953dSKaustabh Chakraborty /* 111 nits */ 462*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 463*47d7953dSKaustabh Chakraborty 0x00, 0xbb, 0x00, 0xc3, 0x00, 0xbe, 464*47d7953dSKaustabh Chakraborty 0x87, 0x87, 0x88, 0x85, 0x85, 0x88, 465*47d7953dSKaustabh Chakraborty 0x88, 0x87, 0x89, 0x80, 0x80, 0x84, 466*47d7953dSKaustabh Chakraborty 0x81, 0x81, 0x82, 0x85, 0x86, 0x87, 467*47d7953dSKaustabh Chakraborty 0x9c, 0x9c, 0x8b, 0xb2, 0xc2, 0x9a, 468*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 469*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0x15 }, 470*47d7953dSKaustabh Chakraborty }, { 471*47d7953dSKaustabh Chakraborty /* 119 nits */ 472*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 473*47d7953dSKaustabh Chakraborty 0x00, 0xc0, 0x00, 0xc8, 0x00, 0xc4, 474*47d7953dSKaustabh Chakraborty 0x87, 0x87, 0x88, 0x82, 0x84, 0x86, 475*47d7953dSKaustabh Chakraborty 0x87, 0x85, 0x87, 0x82, 0x81, 0x84, 476*47d7953dSKaustabh Chakraborty 0x83, 0x82, 0x83, 0x80, 0x81, 0x84, 477*47d7953dSKaustabh Chakraborty 0x9c, 0x9c, 0x8c, 0xb2, 0xc2, 0x9a, 478*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 479*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x02, 0x14 }, 480*47d7953dSKaustabh Chakraborty }, { 481*47d7953dSKaustabh Chakraborty /* 126 nits */ 482*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 483*47d7953dSKaustabh Chakraborty 0x00, 0xc0, 0x00, 0xc8, 0x00, 0xc4, 484*47d7953dSKaustabh Chakraborty 0x87, 0x87, 0x88, 0x82, 0x84, 0x86, 485*47d7953dSKaustabh Chakraborty 0x87, 0x85, 0x87, 0x82, 0x81, 0x84, 486*47d7953dSKaustabh Chakraborty 0x83, 0x82, 0x83, 0x80, 0x81, 0x84, 487*47d7953dSKaustabh Chakraborty 0x9c, 0x9c, 0x8d, 0xb2, 0xc2, 0x9a, 488*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 489*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x01, 0xde }, 490*47d7953dSKaustabh Chakraborty }, { 491*47d7953dSKaustabh Chakraborty /* 134 nits */ 492*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 493*47d7953dSKaustabh Chakraborty 0x00, 0xc0, 0x00, 0xc8, 0x00, 0xc4, 494*47d7953dSKaustabh Chakraborty 0x87, 0x87, 0x88, 0x82, 0x84, 0x86, 495*47d7953dSKaustabh Chakraborty 0x87, 0x85, 0x87, 0x82, 0x81, 0x84, 496*47d7953dSKaustabh Chakraborty 0x83, 0x82, 0x83, 0x80, 0x81, 0x84, 497*47d7953dSKaustabh Chakraborty 0x9c, 0x9c, 0x8d, 0xa4, 0xb0, 0x92, 498*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 499*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x01, 0x94 }, 500*47d7953dSKaustabh Chakraborty }, { 501*47d7953dSKaustabh Chakraborty /* 143 nits */ 502*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 503*47d7953dSKaustabh Chakraborty 0x00, 0xc0, 0x00, 0xc8, 0x00, 0xc3, 504*47d7953dSKaustabh Chakraborty 0x87, 0x87, 0x88, 0x82, 0x84, 0x86, 505*47d7953dSKaustabh Chakraborty 0x87, 0x85, 0x87, 0x82, 0x81, 0x85, 506*47d7953dSKaustabh Chakraborty 0x83, 0x82, 0x83, 0x80, 0x81, 0x84, 507*47d7953dSKaustabh Chakraborty 0x92, 0x92, 0x89, 0xab, 0xb6, 0x96, 508*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 509*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x01, 0x46 }, 510*47d7953dSKaustabh Chakraborty }, { 511*47d7953dSKaustabh Chakraborty /* 152 nits */ 512*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 513*47d7953dSKaustabh Chakraborty 0x00, 0xc0, 0x00, 0xc8, 0x00, 0xc3, 514*47d7953dSKaustabh Chakraborty 0x87, 0x87, 0x88, 0x83, 0x84, 0x86, 515*47d7953dSKaustabh Chakraborty 0x87, 0x85, 0x87, 0x81, 0x81, 0x85, 516*47d7953dSKaustabh Chakraborty 0x84, 0x82, 0x83, 0x80, 0x81, 0x83, 517*47d7953dSKaustabh Chakraborty 0x92, 0x92, 0x8b, 0xab, 0xb6, 0x96, 518*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 519*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0xfa }, 520*47d7953dSKaustabh Chakraborty }, { 521*47d7953dSKaustabh Chakraborty /* 162 nits */ 522*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 523*47d7953dSKaustabh Chakraborty 0x00, 0xc0, 0x00, 0xc8, 0x00, 0xc3, 524*47d7953dSKaustabh Chakraborty 0x87, 0x87, 0x88, 0x83, 0x84, 0x86, 525*47d7953dSKaustabh Chakraborty 0x87, 0x85, 0x87, 0x81, 0x81, 0x84, 526*47d7953dSKaustabh Chakraborty 0x84, 0x82, 0x84, 0x80, 0x81, 0x83, 527*47d7953dSKaustabh Chakraborty 0x92, 0x92, 0x8b, 0x9d, 0xa4, 0x8e, 528*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 529*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0xac }, 530*47d7953dSKaustabh Chakraborty }, { 531*47d7953dSKaustabh Chakraborty /* 172 nits */ 532*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 533*47d7953dSKaustabh Chakraborty 0x00, 0xc0, 0x00, 0xc8, 0x00, 0xc3, 534*47d7953dSKaustabh Chakraborty 0x87, 0x87, 0x88, 0x83, 0x84, 0x86, 535*47d7953dSKaustabh Chakraborty 0x87, 0x85, 0x87, 0x81, 0x81, 0x84, 536*47d7953dSKaustabh Chakraborty 0x84, 0x82, 0x83, 0x80, 0x81, 0x84, 537*47d7953dSKaustabh Chakraborty 0x93, 0x92, 0x8c, 0x9d, 0xa4, 0x8e, 538*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 539*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x57 }, 540*47d7953dSKaustabh Chakraborty }, { 541*47d7953dSKaustabh Chakraborty /* 183 nits */ 542*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 543*47d7953dSKaustabh Chakraborty 0x00, 0xc2, 0x00, 0xca, 0x00, 0xc5, 544*47d7953dSKaustabh Chakraborty 0x86, 0x86, 0x87, 0x85, 0x84, 0x87, 545*47d7953dSKaustabh Chakraborty 0x87, 0x86, 0x88, 0x7e, 0x80, 0x83, 546*47d7953dSKaustabh Chakraborty 0x84, 0x82, 0x83, 0x80, 0x81, 0x83, 547*47d7953dSKaustabh Chakraborty 0x93, 0x92, 0x8c, 0x9d, 0xa4, 0x8e, 548*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 549*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 550*47d7953dSKaustabh Chakraborty }, { 551*47d7953dSKaustabh Chakraborty /* 195 nits */ 552*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 553*47d7953dSKaustabh Chakraborty 0x00, 0xc7, 0x00, 0xce, 0x00, 0xc9, 554*47d7953dSKaustabh Chakraborty 0x86, 0x87, 0x86, 0x83, 0x83, 0x85, 555*47d7953dSKaustabh Chakraborty 0x85, 0x84, 0x86, 0x82, 0x82, 0x85, 556*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x81, 0x81, 0x81, 0x84, 557*47d7953dSKaustabh Chakraborty 0x93, 0x92, 0x8c, 0x9d, 0xa4, 0x8e, 558*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 559*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 560*47d7953dSKaustabh Chakraborty }, { 561*47d7953dSKaustabh Chakraborty /* 207 nits */ 562*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 563*47d7953dSKaustabh Chakraborty 0x00, 0xcc, 0x00, 0xd2, 0x00, 0xce, 564*47d7953dSKaustabh Chakraborty 0x86, 0x86, 0x87, 0x81, 0x83, 0x84, 565*47d7953dSKaustabh Chakraborty 0x84, 0x82, 0x84, 0x83, 0x83, 0x85, 566*47d7953dSKaustabh Chakraborty 0x81, 0x81, 0x82, 0x7c, 0x7d, 0x81, 567*47d7953dSKaustabh Chakraborty 0x93, 0x92, 0x8c, 0x9d, 0xa4, 0x8e, 568*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 569*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 570*47d7953dSKaustabh Chakraborty }, { 571*47d7953dSKaustabh Chakraborty /* 220 nits */ 572*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 573*47d7953dSKaustabh Chakraborty 0x00, 0xd1, 0x00, 0xd6, 0x00, 0xd3, 574*47d7953dSKaustabh Chakraborty 0x86, 0x86, 0x86, 0x81, 0x83, 0x84, 575*47d7953dSKaustabh Chakraborty 0x84, 0x82, 0x84, 0x80, 0x80, 0x83, 576*47d7953dSKaustabh Chakraborty 0x81, 0x81, 0x82, 0x7c, 0x7d, 0x81, 577*47d7953dSKaustabh Chakraborty 0x93, 0x92, 0x8c, 0x9d, 0xa4, 0x8e, 578*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 579*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 580*47d7953dSKaustabh Chakraborty }, { 581*47d7953dSKaustabh Chakraborty /* 234 nits */ 582*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 583*47d7953dSKaustabh Chakraborty 0x00, 0xd6, 0x00, 0xdb, 0x00, 0xd8, 584*47d7953dSKaustabh Chakraborty 0x85, 0x85, 0x85, 0x81, 0x83, 0x84, 585*47d7953dSKaustabh Chakraborty 0x83, 0x82, 0x83, 0x80, 0x80, 0x82, 586*47d7953dSKaustabh Chakraborty 0x84, 0x82, 0x83, 0x79, 0x79, 0x7e, 587*47d7953dSKaustabh Chakraborty 0x93, 0x92, 0x8d, 0x9d, 0xa4, 0x8e, 588*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 589*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 590*47d7953dSKaustabh Chakraborty }, { 591*47d7953dSKaustabh Chakraborty /* 249 nits */ 592*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 593*47d7953dSKaustabh Chakraborty 0x00, 0xdc, 0x00, 0xe0, 0x00, 0xdd, 594*47d7953dSKaustabh Chakraborty 0x84, 0x84, 0x84, 0x81, 0x82, 0x83, 595*47d7953dSKaustabh Chakraborty 0x84, 0x82, 0x84, 0x7f, 0x7f, 0x82, 596*47d7953dSKaustabh Chakraborty 0x81, 0x80, 0x81, 0x80, 0x81, 0x82, 597*47d7953dSKaustabh Chakraborty 0x8c, 0x8c, 0x86, 0x9d, 0xa4, 0x8e, 598*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 599*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 600*47d7953dSKaustabh Chakraborty }, { 601*47d7953dSKaustabh Chakraborty /* 265 nits */ 602*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 603*47d7953dSKaustabh Chakraborty 0x00, 0xe2, 0x00, 0xe5, 0x00, 0xe3, 604*47d7953dSKaustabh Chakraborty 0x83, 0x83, 0x83, 0x81, 0x82, 0x83, 605*47d7953dSKaustabh Chakraborty 0x82, 0x82, 0x83, 0x82, 0x81, 0x83, 606*47d7953dSKaustabh Chakraborty 0x7f, 0x7e, 0x80, 0x7c, 0x7d, 0x80, 607*47d7953dSKaustabh Chakraborty 0x8c, 0x8c, 0x86, 0x8e, 0x92, 0x87, 608*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 609*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 610*47d7953dSKaustabh Chakraborty }, { 611*47d7953dSKaustabh Chakraborty /* 282 nits */ 612*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 613*47d7953dSKaustabh Chakraborty 0x00, 0xe8, 0x00, 0xea, 0x00, 0xe9, 614*47d7953dSKaustabh Chakraborty 0x83, 0x83, 0x83, 0x80, 0x82, 0x82, 615*47d7953dSKaustabh Chakraborty 0x81, 0x82, 0x82, 0x82, 0x81, 0x82, 616*47d7953dSKaustabh Chakraborty 0x81, 0x80, 0x81, 0x80, 0x80, 0x81, 617*47d7953dSKaustabh Chakraborty 0x85, 0x85, 0x83, 0x8e, 0x92, 0x87, 618*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 619*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 620*47d7953dSKaustabh Chakraborty }, { 621*47d7953dSKaustabh Chakraborty /* 300 nits */ 622*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 623*47d7953dSKaustabh Chakraborty 0x00, 0xed, 0x00, 0xef, 0x00, 0xed, 624*47d7953dSKaustabh Chakraborty 0x81, 0x82, 0x81, 0x81, 0x81, 0x82, 625*47d7953dSKaustabh Chakraborty 0x82, 0x82, 0x83, 0x80, 0x80, 0x81, 626*47d7953dSKaustabh Chakraborty 0x81, 0x81, 0x82, 0x83, 0x83, 0x83, 627*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x7f, 0x8e, 0x92, 0x87, 628*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 629*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 630*47d7953dSKaustabh Chakraborty }, { 631*47d7953dSKaustabh Chakraborty /* 316 nits */ 632*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 633*47d7953dSKaustabh Chakraborty 0x00, 0xf3, 0x00, 0xf4, 0x00, 0xf3, 634*47d7953dSKaustabh Chakraborty 0x80, 0x81, 0x80, 0x81, 0x81, 0x81, 635*47d7953dSKaustabh Chakraborty 0x82, 0x82, 0x82, 0x81, 0x80, 0x81, 636*47d7953dSKaustabh Chakraborty 0x82, 0x82, 0x83, 0x80, 0x80, 0x80, 637*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 638*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 639*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 640*47d7953dSKaustabh Chakraborty }, { 641*47d7953dSKaustabh Chakraborty /* 333 nits */ 642*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 643*47d7953dSKaustabh Chakraborty 0x00, 0xf8, 0x00, 0xf8, 0x00, 0xf8, 644*47d7953dSKaustabh Chakraborty 0x80, 0x81, 0x80, 0x81, 0x80, 0x81, 645*47d7953dSKaustabh Chakraborty 0x81, 0x82, 0x82, 0x81, 0x80, 0x81, 646*47d7953dSKaustabh Chakraborty 0x83, 0x83, 0x83, 0x7e, 0x7d, 0x7e, 647*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 648*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 649*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 650*47d7953dSKaustabh Chakraborty }, { 651*47d7953dSKaustabh Chakraborty /* 360 nits */ 652*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 653*47d7953dSKaustabh Chakraborty 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 654*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 655*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 656*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 657*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 658*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 659*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 660*47d7953dSKaustabh Chakraborty }, { 661*47d7953dSKaustabh Chakraborty /* 378 nits */ 662*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 663*47d7953dSKaustabh Chakraborty 0x01, 0x04, 0x01, 0x03, 0x01, 0x04, 664*47d7953dSKaustabh Chakraborty 0x7f, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 665*47d7953dSKaustabh Chakraborty 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 666*47d7953dSKaustabh Chakraborty 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 667*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 668*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 669*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 670*47d7953dSKaustabh Chakraborty }, { 671*47d7953dSKaustabh Chakraborty /* 395 nits */ 672*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 673*47d7953dSKaustabh Chakraborty 0x01, 0x09, 0x01, 0x07, 0x01, 0x08, 674*47d7953dSKaustabh Chakraborty 0x7e, 0x7f, 0x80, 0x7f, 0x7f, 0x7f, 675*47d7953dSKaustabh Chakraborty 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 676*47d7953dSKaustabh Chakraborty 0x80, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 677*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x7f, 0x7e, 0x7e, 0x7f, 678*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 679*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 680*47d7953dSKaustabh Chakraborty }, { 681*47d7953dSKaustabh Chakraborty /* 413 nits */ 682*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 683*47d7953dSKaustabh Chakraborty 0x01, 0x0e, 0x01, 0x0b, 0x01, 0x0c, 684*47d7953dSKaustabh Chakraborty 0x7e, 0x7f, 0x80, 0x7e, 0x7e, 0x7e, 685*47d7953dSKaustabh Chakraborty 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 686*47d7953dSKaustabh Chakraborty 0x80, 0x7f, 0x7f, 0x7d, 0x7d, 0x7d, 687*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x7f, 0x7d, 0x7e, 0x7e, 688*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 689*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 690*47d7953dSKaustabh Chakraborty }, { 691*47d7953dSKaustabh Chakraborty /* 430 nits */ 692*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 693*47d7953dSKaustabh Chakraborty 0x01, 0x13, 0x01, 0x0f, 0x01, 0x10, 694*47d7953dSKaustabh Chakraborty 0x7d, 0x7f, 0x80, 0x7e, 0x7e, 0x7e, 695*47d7953dSKaustabh Chakraborty 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 696*47d7953dSKaustabh Chakraborty 0x80, 0x7f, 0x7f, 0x7d, 0x7d, 0x7d, 697*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x7f, 0x7c, 0x7d, 0x7e, 698*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 699*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 700*47d7953dSKaustabh Chakraborty }, { 701*47d7953dSKaustabh Chakraborty /* 448 nits */ 702*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 703*47d7953dSKaustabh Chakraborty 0x01, 0x18, 0x01, 0x13, 0x01, 0x14, 704*47d7953dSKaustabh Chakraborty 0x7c, 0x7e, 0x80, 0x7e, 0x7e, 0x7e, 705*47d7953dSKaustabh Chakraborty 0x7e, 0x7e, 0x7d, 0x7e, 0x7f, 0x7e, 706*47d7953dSKaustabh Chakraborty 0x80, 0x7f, 0x7f, 0x7c, 0x7c, 0x7c, 707*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x7e, 0x7b, 0x7c, 0x7d, 708*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 709*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 710*47d7953dSKaustabh Chakraborty }, { 711*47d7953dSKaustabh Chakraborty /* 465 nits */ 712*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 713*47d7953dSKaustabh Chakraborty 0x01, 0x1d, 0x01, 0x17, 0x01, 0x18, 714*47d7953dSKaustabh Chakraborty 0x7c, 0x7e, 0x80, 0x7d, 0x7d, 0x7d, 715*47d7953dSKaustabh Chakraborty 0x7d, 0x7d, 0x7d, 0x7e, 0x7f, 0x7e, 716*47d7953dSKaustabh Chakraborty 0x80, 0x7f, 0x7f, 0x7b, 0x7b, 0x7b, 717*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x7e, 0x7a, 0x7c, 0x7d, 718*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 719*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 720*47d7953dSKaustabh Chakraborty }, { 721*47d7953dSKaustabh Chakraborty /* 483 nits */ 722*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 723*47d7953dSKaustabh Chakraborty 0x01, 0x22, 0x01, 0x1b, 0x01, 0x1c, 724*47d7953dSKaustabh Chakraborty 0x7b, 0x7e, 0x80, 0x7d, 0x7d, 0x7d, 725*47d7953dSKaustabh Chakraborty 0x7d, 0x7d, 0x7c, 0x7e, 0x7f, 0x7e, 726*47d7953dSKaustabh Chakraborty 0x80, 0x7f, 0x7f, 0x7a, 0x7a, 0x7a, 727*47d7953dSKaustabh Chakraborty 0x80, 0x80, 0x7e, 0x79, 0x7b, 0x7c, 728*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 729*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 730*47d7953dSKaustabh Chakraborty }, { 731*47d7953dSKaustabh Chakraborty /* 500 nits */ 732*47d7953dSKaustabh Chakraborty { MCS_GAMMACTL, 733*47d7953dSKaustabh Chakraborty 0x01, 0x27, 0x01, 0x1f, 0x01, 0x20, 734*47d7953dSKaustabh Chakraborty 0x7b, 0x7e, 0x80, 0x7d, 0x7d, 0x7d, 735*47d7953dSKaustabh Chakraborty 0x7d, 0x7d, 0x7c, 0x7e, 0x7f, 0x7e, 736*47d7953dSKaustabh Chakraborty 0x80, 0x7f, 0x7f, 0x7a, 0x7a, 0x7a, 737*47d7953dSKaustabh Chakraborty 0x81, 0x80, 0x7e, 0x79, 0x7b, 0x7c, 738*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, }, 739*47d7953dSKaustabh Chakraborty { MCS_AIDCTL, 0x00, 0x10 }, 740*47d7953dSKaustabh Chakraborty }, 741*47d7953dSKaustabh Chakraborty }; 742*47d7953dSKaustabh Chakraborty 743*47d7953dSKaustabh Chakraborty struct s6e8aa5x01_ams561ra01_ctx { 744*47d7953dSKaustabh Chakraborty struct drm_panel panel; 745*47d7953dSKaustabh Chakraborty struct mipi_dsi_device *dsi; 746*47d7953dSKaustabh Chakraborty struct backlight_device *bl; 747*47d7953dSKaustabh Chakraborty struct gpio_desc *reset_gpio; 748*47d7953dSKaustabh Chakraborty struct regulator_bulk_data *supplies; 749*47d7953dSKaustabh Chakraborty u32 nr_supplies; 750*47d7953dSKaustabh Chakraborty }; 751*47d7953dSKaustabh Chakraborty 752*47d7953dSKaustabh Chakraborty static const struct regulator_bulk_data s6e8aa5x01_ams561ra01_supplies[] = { 753*47d7953dSKaustabh Chakraborty { .supply = "vdd" }, 754*47d7953dSKaustabh Chakraborty { .supply = "vci" }, 755*47d7953dSKaustabh Chakraborty }; 756*47d7953dSKaustabh Chakraborty 757*47d7953dSKaustabh Chakraborty static inline struct s6e8aa5x01_ams561ra01_ctx *to_ctx(struct drm_panel *panel) 758*47d7953dSKaustabh Chakraborty { 759*47d7953dSKaustabh Chakraborty return container_of(panel, struct s6e8aa5x01_ams561ra01_ctx, panel); 760*47d7953dSKaustabh Chakraborty } 761*47d7953dSKaustabh Chakraborty 762*47d7953dSKaustabh Chakraborty static int s6e8aa5x01_ams561ra01_update_status(struct backlight_device *bl) 763*47d7953dSKaustabh Chakraborty { 764*47d7953dSKaustabh Chakraborty struct s6e8aa5x01_ams561ra01_ctx *ctx = bl_get_data(bl); 765*47d7953dSKaustabh Chakraborty struct mipi_dsi_multi_context dsi = { .dsi = ctx->dsi }; 766*47d7953dSKaustabh Chakraborty u16 lvl = backlight_get_brightness(bl); 767*47d7953dSKaustabh Chakraborty 768*47d7953dSKaustabh Chakraborty if (!ctx->panel.enabled) 769*47d7953dSKaustabh Chakraborty return 0; 770*47d7953dSKaustabh Chakraborty 771*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_write_seq_multi(&dsi, MCS_ACCESSPROT, 0x5a, 0x5a); 772*47d7953dSKaustabh Chakraborty 773*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_write_buffer_multi(&dsi, 774*47d7953dSKaustabh Chakraborty s6e8aa5x01_ams561ra01_cmds[lvl].gamma, 775*47d7953dSKaustabh Chakraborty GAMMA_CMD_LEN); 776*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_write_buffer_multi(&dsi, 777*47d7953dSKaustabh Chakraborty s6e8aa5x01_ams561ra01_cmds[lvl].aid, 778*47d7953dSKaustabh Chakraborty AID_CMD_LEN); 779*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_write_seq_multi(&dsi, MCS_GAMMAUPD, 0x03); 780*47d7953dSKaustabh Chakraborty 781*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_write_seq_multi(&dsi, MCS_ACCESSPROT, 0xa5, 0xa5); 782*47d7953dSKaustabh Chakraborty 783*47d7953dSKaustabh Chakraborty return dsi.accum_err; 784*47d7953dSKaustabh Chakraborty } 785*47d7953dSKaustabh Chakraborty 786*47d7953dSKaustabh Chakraborty static int s6e8aa5x01_ams561ra01_prepare(struct drm_panel *panel) 787*47d7953dSKaustabh Chakraborty { 788*47d7953dSKaustabh Chakraborty struct s6e8aa5x01_ams561ra01_ctx *ctx = to_ctx(panel); 789*47d7953dSKaustabh Chakraborty struct device *dev = &ctx->dsi->dev; 790*47d7953dSKaustabh Chakraborty int ret; 791*47d7953dSKaustabh Chakraborty 792*47d7953dSKaustabh Chakraborty ret = regulator_bulk_enable(ctx->nr_supplies, ctx->supplies); 793*47d7953dSKaustabh Chakraborty if (ret < 0) { 794*47d7953dSKaustabh Chakraborty dev_err(dev, "failed to enable regulators: %d\n", ret); 795*47d7953dSKaustabh Chakraborty return ret; 796*47d7953dSKaustabh Chakraborty } 797*47d7953dSKaustabh Chakraborty 798*47d7953dSKaustabh Chakraborty gpiod_set_value_cansleep(ctx->reset_gpio, 0); 799*47d7953dSKaustabh Chakraborty usleep_range(5000, 6000); 800*47d7953dSKaustabh Chakraborty gpiod_set_value_cansleep(ctx->reset_gpio, 1); 801*47d7953dSKaustabh Chakraborty usleep_range(5000, 6000); 802*47d7953dSKaustabh Chakraborty gpiod_set_value_cansleep(ctx->reset_gpio, 0); 803*47d7953dSKaustabh Chakraborty usleep_range(10000, 11000); 804*47d7953dSKaustabh Chakraborty 805*47d7953dSKaustabh Chakraborty return 0; 806*47d7953dSKaustabh Chakraborty } 807*47d7953dSKaustabh Chakraborty 808*47d7953dSKaustabh Chakraborty static int s6e8aa5x01_ams561ra01_unprepare(struct drm_panel *panel) 809*47d7953dSKaustabh Chakraborty { 810*47d7953dSKaustabh Chakraborty struct s6e8aa5x01_ams561ra01_ctx *ctx = to_ctx(panel); 811*47d7953dSKaustabh Chakraborty 812*47d7953dSKaustabh Chakraborty gpiod_set_value_cansleep(ctx->reset_gpio, 1); 813*47d7953dSKaustabh Chakraborty usleep_range(5000, 6000); 814*47d7953dSKaustabh Chakraborty 815*47d7953dSKaustabh Chakraborty regulator_bulk_disable(ctx->nr_supplies, ctx->supplies); 816*47d7953dSKaustabh Chakraborty 817*47d7953dSKaustabh Chakraborty return 0; 818*47d7953dSKaustabh Chakraborty } 819*47d7953dSKaustabh Chakraborty 820*47d7953dSKaustabh Chakraborty static int s6e8aa5x01_ams561ra01_enable(struct drm_panel *panel) 821*47d7953dSKaustabh Chakraborty { 822*47d7953dSKaustabh Chakraborty struct s6e8aa5x01_ams561ra01_ctx *ctx = to_ctx(panel); 823*47d7953dSKaustabh Chakraborty struct mipi_dsi_multi_context dsi = { .dsi = ctx->dsi }; 824*47d7953dSKaustabh Chakraborty 825*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_exit_sleep_mode_multi(&dsi); 826*47d7953dSKaustabh Chakraborty mipi_dsi_msleep(&dsi, 100); 827*47d7953dSKaustabh Chakraborty 828*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_write_seq_multi(&dsi, MCS_ACCESSPROT, 0x5a, 0x5a); 829*47d7953dSKaustabh Chakraborty 830*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_write_seq_multi(&dsi, MCS_PENTILE, 0xd8, 0xd8, 0x00); 831*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_write_seq_multi(&dsi, MCS_PCD, 0x5c); 832*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_write_seq_multi(&dsi, MCS_ERRFLAG, 0xed, 0xc7, 0x23, 0x67); 833*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_write_seq_multi(&dsi, MCS_DISPCTL, 0x0c, 0x0c, 0xb9, 0x01); 834*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_write_seq_multi(&dsi, MCS_LTPSCTL, 835*47d7953dSKaustabh Chakraborty 0x00, 0x45, 0x10, 0x10, 0x08, 0x32, 0x54, 0x00, 836*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x00, 0x07, 0x06, 0x00, 0x00, 0x00, 837*47d7953dSKaustabh Chakraborty 0x00, 0x00, 0x48, 0x5e, 0x00, 0x00, 0x00, 0x00, 838*47d7953dSKaustabh Chakraborty 0x00, 0x03, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 839*47d7953dSKaustabh Chakraborty 0x08, 0x05, 0x2a, 0x54, 0x03, 0xcc, 0x00, 0xff, 840*47d7953dSKaustabh Chakraborty 0xfb, 0x03, 0x0d, 0x00, 0x11, 0x0f, 0x02, 0x03, 841*47d7953dSKaustabh Chakraborty 0x0b, 0x0c, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 842*47d7953dSKaustabh Chakraborty 0x13, 0x13, 0x13, 0x13, 0x00, 0x02, 0x03, 0x0b, 843*47d7953dSKaustabh Chakraborty 0x0c, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 844*47d7953dSKaustabh Chakraborty 0x13, 0x13); 845*47d7953dSKaustabh Chakraborty 846*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_write_seq_multi(&dsi, MCS_ACCESSPROT, 0xa5, 0xa5); 847*47d7953dSKaustabh Chakraborty 848*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_set_display_on_multi(&dsi); 849*47d7953dSKaustabh Chakraborty 850*47d7953dSKaustabh Chakraborty return dsi.accum_err; 851*47d7953dSKaustabh Chakraborty } 852*47d7953dSKaustabh Chakraborty 853*47d7953dSKaustabh Chakraborty static int s6e8aa5x01_ams561ra01_disable(struct drm_panel *panel) 854*47d7953dSKaustabh Chakraborty { 855*47d7953dSKaustabh Chakraborty struct s6e8aa5x01_ams561ra01_ctx *ctx = to_ctx(panel); 856*47d7953dSKaustabh Chakraborty struct mipi_dsi_multi_context dsi = { .dsi = ctx->dsi }; 857*47d7953dSKaustabh Chakraborty 858*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_set_display_off_multi(&dsi); 859*47d7953dSKaustabh Chakraborty mipi_dsi_msleep(&dsi, 100); 860*47d7953dSKaustabh Chakraborty 861*47d7953dSKaustabh Chakraborty mipi_dsi_dcs_enter_sleep_mode_multi(&dsi); 862*47d7953dSKaustabh Chakraborty mipi_dsi_msleep(&dsi, 150); 863*47d7953dSKaustabh Chakraborty 864*47d7953dSKaustabh Chakraborty return dsi.accum_err; 865*47d7953dSKaustabh Chakraborty } 866*47d7953dSKaustabh Chakraborty 867*47d7953dSKaustabh Chakraborty static const struct drm_display_mode s6e8aa5x01_ams561ra01_mode = { 868*47d7953dSKaustabh Chakraborty .clock = (720 + 62 + 2 + 26) * (1480 + 12 + 2 + 10) * 60 / 1000, 869*47d7953dSKaustabh Chakraborty .hdisplay = 720, 870*47d7953dSKaustabh Chakraborty .hsync_start = 720 + 62, 871*47d7953dSKaustabh Chakraborty .hsync_end = 720 + 62 + 2, 872*47d7953dSKaustabh Chakraborty .htotal = 720 + 62 + 2 + 26, 873*47d7953dSKaustabh Chakraborty .vdisplay = 1480, 874*47d7953dSKaustabh Chakraborty .vsync_start = 1480 + 12, 875*47d7953dSKaustabh Chakraborty .vsync_end = 1480 + 12 + 2, 876*47d7953dSKaustabh Chakraborty .vtotal = 1480 + 12 + 2 + 10, 877*47d7953dSKaustabh Chakraborty .width_mm = 62, 878*47d7953dSKaustabh Chakraborty .height_mm = 128, 879*47d7953dSKaustabh Chakraborty .type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, 880*47d7953dSKaustabh Chakraborty }; 881*47d7953dSKaustabh Chakraborty 882*47d7953dSKaustabh Chakraborty static int s6e8aa5x01_ams561ra01_get_modes(struct drm_panel *panel, 883*47d7953dSKaustabh Chakraborty struct drm_connector *connector) 884*47d7953dSKaustabh Chakraborty { 885*47d7953dSKaustabh Chakraborty return drm_connector_helper_get_modes_fixed(connector, 886*47d7953dSKaustabh Chakraborty &s6e8aa5x01_ams561ra01_mode); 887*47d7953dSKaustabh Chakraborty } 888*47d7953dSKaustabh Chakraborty 889*47d7953dSKaustabh Chakraborty static const struct backlight_ops s6e8aa5x01_ams561ra01_bl_ops = { 890*47d7953dSKaustabh Chakraborty .update_status = s6e8aa5x01_ams561ra01_update_status, 891*47d7953dSKaustabh Chakraborty }; 892*47d7953dSKaustabh Chakraborty 893*47d7953dSKaustabh Chakraborty static const struct drm_panel_funcs s6e8aa5x01_ams561ra01_panel_funcs = { 894*47d7953dSKaustabh Chakraborty .prepare = s6e8aa5x01_ams561ra01_prepare, 895*47d7953dSKaustabh Chakraborty .unprepare = s6e8aa5x01_ams561ra01_unprepare, 896*47d7953dSKaustabh Chakraborty .enable = s6e8aa5x01_ams561ra01_enable, 897*47d7953dSKaustabh Chakraborty .disable = s6e8aa5x01_ams561ra01_disable, 898*47d7953dSKaustabh Chakraborty .get_modes = s6e8aa5x01_ams561ra01_get_modes, 899*47d7953dSKaustabh Chakraborty }; 900*47d7953dSKaustabh Chakraborty 901*47d7953dSKaustabh Chakraborty static int s6e8aa5x01_ams561ra01_probe(struct mipi_dsi_device *dsi) 902*47d7953dSKaustabh Chakraborty { 903*47d7953dSKaustabh Chakraborty struct device *dev = &dsi->dev; 904*47d7953dSKaustabh Chakraborty struct s6e8aa5x01_ams561ra01_ctx *ctx; 905*47d7953dSKaustabh Chakraborty int ret; 906*47d7953dSKaustabh Chakraborty 907*47d7953dSKaustabh Chakraborty ctx = devm_drm_panel_alloc(dev, struct s6e8aa5x01_ams561ra01_ctx, panel, 908*47d7953dSKaustabh Chakraborty &s6e8aa5x01_ams561ra01_panel_funcs, 909*47d7953dSKaustabh Chakraborty DRM_MODE_CONNECTOR_DSI); 910*47d7953dSKaustabh Chakraborty if (IS_ERR(ctx)) 911*47d7953dSKaustabh Chakraborty return PTR_ERR(ctx); 912*47d7953dSKaustabh Chakraborty 913*47d7953dSKaustabh Chakraborty ctx->dsi = dsi; 914*47d7953dSKaustabh Chakraborty mipi_dsi_set_drvdata(dsi, ctx); 915*47d7953dSKaustabh Chakraborty 916*47d7953dSKaustabh Chakraborty ctx->nr_supplies = ARRAY_SIZE(s6e8aa5x01_ams561ra01_supplies); 917*47d7953dSKaustabh Chakraborty ret = devm_regulator_bulk_get_const(dev, ctx->nr_supplies, 918*47d7953dSKaustabh Chakraborty s6e8aa5x01_ams561ra01_supplies, 919*47d7953dSKaustabh Chakraborty &ctx->supplies); 920*47d7953dSKaustabh Chakraborty if (ret < 0) 921*47d7953dSKaustabh Chakraborty return dev_err_probe(dev, ret, "failed to get regulators\n"); 922*47d7953dSKaustabh Chakraborty 923*47d7953dSKaustabh Chakraborty ctx->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_ASIS); 924*47d7953dSKaustabh Chakraborty if (IS_ERR(ctx->reset_gpio)) 925*47d7953dSKaustabh Chakraborty return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio), 926*47d7953dSKaustabh Chakraborty "failed to get reset-gpios\n"); 927*47d7953dSKaustabh Chakraborty 928*47d7953dSKaustabh Chakraborty ctx->bl = devm_backlight_device_register(dev, dev_name(dev), dev, ctx, 929*47d7953dSKaustabh Chakraborty &s6e8aa5x01_ams561ra01_bl_ops, 930*47d7953dSKaustabh Chakraborty NULL); 931*47d7953dSKaustabh Chakraborty if (IS_ERR(ctx->bl)) 932*47d7953dSKaustabh Chakraborty return dev_err_probe(dev, PTR_ERR(ctx->bl), 933*47d7953dSKaustabh Chakraborty "failed to register backlight device\n"); 934*47d7953dSKaustabh Chakraborty 935*47d7953dSKaustabh Chakraborty ctx->bl->props.type = BACKLIGHT_PLATFORM; 936*47d7953dSKaustabh Chakraborty ctx->bl->props.brightness = ARRAY_SIZE(s6e8aa5x01_ams561ra01_cmds) - 1; 937*47d7953dSKaustabh Chakraborty ctx->bl->props.max_brightness = ctx->bl->props.brightness; 938*47d7953dSKaustabh Chakraborty 939*47d7953dSKaustabh Chakraborty dsi->lanes = 4; 940*47d7953dSKaustabh Chakraborty dsi->format = MIPI_DSI_FMT_RGB888; 941*47d7953dSKaustabh Chakraborty dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | 942*47d7953dSKaustabh Chakraborty MIPI_DSI_MODE_VIDEO_NO_HFP; 943*47d7953dSKaustabh Chakraborty 944*47d7953dSKaustabh Chakraborty ctx->panel.prepare_prev_first = true; 945*47d7953dSKaustabh Chakraborty drm_panel_add(&ctx->panel); 946*47d7953dSKaustabh Chakraborty 947*47d7953dSKaustabh Chakraborty ret = devm_mipi_dsi_attach(dev, dsi); 948*47d7953dSKaustabh Chakraborty if (ret < 0) { 949*47d7953dSKaustabh Chakraborty drm_panel_remove(&ctx->panel); 950*47d7953dSKaustabh Chakraborty return dev_err_probe(dev, ret, "failed to attach to DSI host\n"); 951*47d7953dSKaustabh Chakraborty } 952*47d7953dSKaustabh Chakraborty 953*47d7953dSKaustabh Chakraborty return 0; 954*47d7953dSKaustabh Chakraborty } 955*47d7953dSKaustabh Chakraborty 956*47d7953dSKaustabh Chakraborty static void s6e8aa5x01_ams561ra01_remove(struct mipi_dsi_device *dsi) 957*47d7953dSKaustabh Chakraborty { 958*47d7953dSKaustabh Chakraborty struct s6e8aa5x01_ams561ra01_ctx *ctx = mipi_dsi_get_drvdata(dsi); 959*47d7953dSKaustabh Chakraborty 960*47d7953dSKaustabh Chakraborty drm_panel_remove(&ctx->panel); 961*47d7953dSKaustabh Chakraborty } 962*47d7953dSKaustabh Chakraborty 963*47d7953dSKaustabh Chakraborty static const struct of_device_id s6e8aa5x01_ams561ra01_of_device_id[] = { 964*47d7953dSKaustabh Chakraborty { .compatible = "samsung,s6e8aa5x01-ams561ra01" }, 965*47d7953dSKaustabh Chakraborty { } 966*47d7953dSKaustabh Chakraborty }; 967*47d7953dSKaustabh Chakraborty MODULE_DEVICE_TABLE(of, s6e8aa5x01_ams561ra01_of_device_id); 968*47d7953dSKaustabh Chakraborty 969*47d7953dSKaustabh Chakraborty static struct mipi_dsi_driver s6e8aa5x01_ams561ra01_dsi_driver = { 970*47d7953dSKaustabh Chakraborty .probe = s6e8aa5x01_ams561ra01_probe, 971*47d7953dSKaustabh Chakraborty .remove = s6e8aa5x01_ams561ra01_remove, 972*47d7953dSKaustabh Chakraborty .driver = { 973*47d7953dSKaustabh Chakraborty .name = "panel-samsung-s6e8aa5x01-ams561ra01", 974*47d7953dSKaustabh Chakraborty .of_match_table = s6e8aa5x01_ams561ra01_of_device_id, 975*47d7953dSKaustabh Chakraborty }, 976*47d7953dSKaustabh Chakraborty }; 977*47d7953dSKaustabh Chakraborty module_mipi_dsi_driver(s6e8aa5x01_ams561ra01_dsi_driver); 978*47d7953dSKaustabh Chakraborty 979*47d7953dSKaustabh Chakraborty MODULE_AUTHOR("Kaustabh Chakraborty <kauschluss@disroot.org>"); 980*47d7953dSKaustabh Chakraborty MODULE_DESCRIPTION("Samsung AMS561RA01 Panel with S6E8AA5X01 Controller"); 981*47d7953dSKaustabh Chakraborty MODULE_LICENSE("GPL"); 982