aboutsummaryrefslogtreecommitdiff
path: root/gen_panel_prop.py
diff options
context:
space:
mode:
Diffstat (limited to 'gen_panel_prop.py')
-rw-r--r--gen_panel_prop.py227
1 files changed, 227 insertions, 0 deletions
diff --git a/gen_panel_prop.py b/gen_panel_prop.py
new file mode 100644
index 0000000..23dcd9f
--- /dev/null
+++ b/gen_panel_prop.py
@@ -0,0 +1,227 @@
+AOR = [ # 202 items expected
+ 0x0a,0xd8,0x0a,0xc8,0x0a,0xc0,0x0a,0xb0,0x0a,0xa8,0x0a,0x98,0x0a,0x90,0x0a,0x80,0x0a,0x78,0x0a,0x60,0x0a,0x48,0x0a,0x30,0x0a,
+ 0x18,0x09,0xe0,0x09,0xd0,0x09,0xb8,0x09,0xa0,0x09,0x80,0x09,0x68,0x09,0x50,0x09,0x20,0x09,0x00,0x08,0xe8,0x08,0xd0,0x08,0x98,
+ 0x08,0x80,0x08,0x68,0x08,0x48,0x08,0x38,0x08,0x28,0x07,0xe0,0x07,0xc0,0x07,0xa8,0x07,0x68,0x07,0x40,0x07,0x10,0x06,0xc0,0x06,
+ 0x70,0x06,0x58,0x06,0x28,0x05,0xf0,0x05,0xb8,0x05,0x88,0x05,0x50,0x04,0xe0,0x04,0x90,0x04,0x60,0x04,0x20,0x03,0xf0,0x03,0xa0,
+ 0x03,0x50,0x03,0x18,0x02,0xc0,0x02,0x60,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,
+ 0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,
+ 0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x58,0x02,0x70,0x02,0x30,0x01,0xe8,0x01,0xa8,0x01,
+ 0x70,0x01,0x28,0x00,0xe0,0x00,0x98,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,
+ 0x00,0x70
+]
+DELVSS = [ # 101 items expected
+ 0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x84,0x85,0x86,0x86,0x87,0x87,0x87,0x88,0x89,0x89,0x8a,0x8b,0x8b,0x8c,0x8c,0x8d,
+ 0x8d,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,
+ 0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8e,0x8d,0x8c,0x8b,
+ 0x8a,0x8a,0x8a,0x89,0x89,0x88,0x87,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x85,0x85,0x84,0x83,0x82,0x82,0x81,0x81,
+ 0x81
+]
+BrightLevelForACL = 79
+ACLCutoffAndDelta = [ # at least (100 - BrightLevelForACL) * 2 items expected
+ 0xe5,0x64,0xe5,0x64,0xe5,0x64,0xe5,0x64,0xd8,0x68,0xd8,0x68,0xd8,0x68,0xd8,0x68,0xd8,0x68,0xd8,0x68,0xd8,0x68,0xd8,0x68,0xd8,
+ 0x68,0xd8,0x68,0xcc,0x68,0xcc,0x68,0xcc,0x68,0xcc,0x68,0xcc,0x68,0xcc,0x68,0xcc,0x68
+]
+IRC = [ # 909 items expected
+ 0x03,0x03,0x03,0x00,0x01,0x00,0x01,0x01,0x01,0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x01,0x01,0x03,0x04,0x03,0x01,0x00,0x01,0x01,
+ 0x01,0x00,0x04,0x04,0x03,0x00,0x00,0x01,0x01,0x01,0x00,0x04,0x04,0x03,0x00,0x00,0x01,0x01,0x02,0x00,0x04,0x04,0x03,0x00,0x01,
+ 0x01,0x01,0x01,0x01,0x04,0x04,0x03,0x00,0x01,0x01,0x02,0x01,0x01,0x04,0x05,0x04,0x01,0x00,0x00,0x01,0x01,0x01,0x04,0x05,0x04,
+ 0x01,0x00,0x01,0x01,0x02,0x00,0x05,0x05,0x04,0x00,0x01,0x01,0x01,0x01,0x01,0x05,0x05,0x04,0x01,0x01,0x01,0x01,0x02,0x01,0x05,
+ 0x06,
+ 0x05,0x01,0x00,0x01,0x01,0x02,0x00,0x06,0x06,0x05,0x00,0x01,0x01,0x02,0x02,0x01,0x06,0x07,0x05,0x01,0x01,0x02,0x02,0x02,0x01,
+ 0x07,0x07,0x06,0x00,0x01,0x01,0x02,0x02,0x01,0x07,0x08,0x06,0x01,0x00,0x01,0x02,0x03,0x01,0x07,0x08,0x06,0x01,0x01,0x02,0x02,
+ 0x02,0x01,0x08,0x08,0x07,0x01,0x01,0x01,0x02,0x03,0x01,0x08,0x09,0x07,0x01,0x01,0x01,0x02,0x02,0x02,0x08,0x09,0x07,0x01,0x01,
+ 0x02,0x03,0x03,0x01,0x09,0x0a,0x08,0x01,0x01,0x01,0x03,0x03,0x02,0x09,0x0a,0x08,0x01,0x01,0x02,0x03,0x03,0x01,0x0a,0x0a,0x08,
+ 0x01,
+ 0x02,0x02,0x02,0x03,0x02,0x0a,0x0b,0x09,0x01,0x01,0x02,0x03,0x03,0x01,0x0b,0x0c,0x09,0x01,0x01,0x02,0x03,0x03,0x02,0x0b,0x0c,
+ 0x09,0x01,0x01,0x03,0x03,0x04,0x01,0x0b,0x0c,0x0a,0x02,0x02,0x02,0x03,0x03,0x02,0x0c,0x0d,0x0a,0x01,0x01,0x02,0x03,0x04,0x02,
+ 0x0c,0x0d,0x0a,0x01,0x02,0x03,0x04,0x03,0x02,0x0c,0x0d,0x0a,0x02,0x02,0x03,0x03,0x04,0x02,0x0d,0x0e,0x0b,0x02,0x02,0x03,0x03,
+ 0x04,0x02,0x0d,0x0e,0x0b,0x02,0x02,0x03,0x04,0x04,0x02,0x0e,0x0f,0x0c,0x01,0x02,0x02,0x04,0x04,0x03,0x0f,0x10,0x0c,0x01,0x02,
+ 0x03,
+ 0x04,0x04,0x03,0x0f,0x10,0x0d,0x02,0x02,0x03,0x04,0x05,0x02,0x10,0x11,0x0d,0x02,0x02,0x03,0x04,0x05,0x03,0x11,0x12,0x0e,0x02,
+ 0x02,0x04,0x04,0x05,0x02,0x12,0x13,0x0f,0x02,0x02,0x04,0x05,0x06,0x02,0x12,0x13,0x0f,0x02,0x03,0x04,0x05,0x05,0x03,0x13,0x14,
+ 0x10,0x02,0x03,0x04,0x05,0x05,0x03,0x13,0x15,0x10,0x03,0x02,0x04,0x05,0x06,0x03,0x14,0x16,0x11,0x02,0x02,0x04,0x06,0x06,0x03,
+ 0x15,0x16,0x12,0x02,0x03,0x04,0x06,0x06,0x03,0x15,0x17,0x12,0x03,0x03,0x04,0x06,0x06,0x04,0x17,0x18,0x13,0x02,0x03,0x05,0x07,
+ 0x07,
+ 0x03,0x18,0x1a,0x14,0x03,0x03,0x05,0x06,0x07,0x04,0x19,0x1b,0x15,0x03,0x03,0x05,0x06,0x07,0x04,0x1a,0x1c,0x16,0x03,0x03,0x05,
+ 0x07,0x08,0x04,0x1a,0x1c,0x16,0x03,0x04,0x06,0x08,0x08,0x04,0x1b,0x1e,0x17,0x04,0x03,0x06,0x07,0x08,0x04,0x1c,0x1f,0x18,0x04,
+ 0x03,0x06,0x07,0x09,0x04,0x1d,0x1f,0x19,0x03,0x04,0x05,0x08,0x09,0x05,0x1e,0x20,0x1a,0x04,0x04,0x06,0x08,0x09,0x04,0x1f,0x21,
+ 0x1a,0x04,0x05,0x07,0x08,0x09,0x05,0x20,0x23,0x1b,0x04,0x04,0x07,0x08,0x09,0x05,0x21,0x23,0x1c,0x04,0x05,0x06,0x08,0x09,0x06,
+ 0x22,
+ 0x25,0x1d,0x04,0x04,0x07,0x09,0x0a,0x05,0x23,0x26,0x1e,0x04,0x04,0x07,0x0a,0x0b,0x05,0x24,0x27,0x1f,0x04,0x05,0x07,0x0a,0x0a,
+ 0x06,0x25,0x28,0x1f,0x04,0x05,0x08,0x0a,0x0b,0x06,0x26,0x29,0x21,0x05,0x05,0x07,0x0a,0x0c,0x06,0x28,0x2b,0x22,0x04,0x05,0x08,
+ 0x0b,0x0c,0x06,0x29,0x2c,0x23,0x05,0x06,0x08,0x0b,0x0c,0x07,0x2a,0x2d,0x24,0x05,0x06,0x08,0x0b,0x0c,0x07,0x2b,0x2f,0x25,0x06,
+ 0x05,0x09,0x0b,0x0d,0x06,0x2d,0x30,0x26,0x05,0x06,0x09,0x0c,0x0d,0x07,0x2e,0x32,0x27,0x06,0x06,0x09,0x0c,0x0d,0x08,0x30,0x33,
+ 0x29,
+ 0x05,0x07,0x09,0x0d,0x0e,0x08,0x31,0x35,0x29,0x06,0x06,0x0a,0x0d,0x0e,0x08,0x32,0x36,0x2a,0x06,0x06,0x0a,0x0d,0x0f,0x08,0x33,
+ 0x37,0x2b,0x06,0x06,0x0a,0x0d,0x10,0x08,0x34,0x39,0x2c,0x07,0x06,0x0b,0x0e,0x10,0x08,0x36,0x3a,0x2e,0x06,0x07,0x0b,0x0f,0x11,
+ 0x08,0x38,0x3c,0x30,0x07,0x08,0x0b,0x0f,0x11,0x09,0x39,0x3e,0x31,0x07,0x07,0x0b,0x10,0x12,0x09,0x3a,0x3f,0x32,0x07,0x08,0x0b,
+ 0x10,0x11,0x0a,0x3c,0x40,0x33,0x07,0x08,0x0c,0x10,0x12,0x09,0x3d,0x42,0x34,0x07,0x08,0x0c,0x11,0x12,0x0a,0x3e,0x43,0x35,0x08,
+ 0x08,
+ 0x0c,0x11,0x13,0x0a,0x40,0x45,0x36,0x07,0x08,0x0d,0x11,0x13,0x0a,0x41,0x46,0x37,0x08,0x09,0x0d,0x11,0x13,0x0b,0x43,0x48,0x39,
+ 0x08,0x09,0x0d,0x12,0x14,0x0b,0x45,0x4b,0x3b,0x08,0x08,0x0d,0x13,0x15,0x0b,0x46,0x4c,0x3c,0x09,0x09,0x0e,0x13,0x15,0x0b,0x48,
+ 0x4d,0x3d,0x08,0x0a,0x0e,0x14,0x15,0x0c,0x49,0x4f,0x3e,0x09,0x0a,0x0f,0x14,0x16,0x0c,0x4b,0x51,0x3f,0x09,0x09,0x0f,0x14,0x17,
+ 0x0c,0x4c,0x52,0x41,0x09,0x0a,0x0f,0x15,0x17,0x0c,0x4e,0x54,0x42,0x09,0x0a,0x10,0x15,0x18,0x0c,0x50,0x56,0x44,0x09,0x0a,0x10,
+ 0x16,
+ 0x18,0x0c,0x51,0x58,0x45,0x0a,0x0a,0x10,0x16,0x19,0x0d,0x53,0x5a,0x47,0x0a,0x0a,0x10,0x16,0x19,0x0d,0x55,0x5b,0x48,0x0a,0x0b,
+ 0x11,0x17,0x1a,0x0d,0x56,0x5d,0x49,0x0b,0x0b,0x12,0x17,0x1a,0x0d,0x58,0x5f,0x4b,0x0b,0x0c,0x12,0x18,0x1a,0x0e,0x5a,0x61,0x4d,
+ 0x0b,0x0c,0x12,0x18,0x1b,0x0e,0x5c,0x63,0x4e,0x0b,0x0c,0x12,0x18,0x1b,0x0f,0x5e,0x66,0x50,0x0b,0x0c,0x13,0x1a,0x1c,0x0f,0x60,
+ 0x67,0x51,0x0b,0x0d,0x13,0x1a,0x1c,0x10,0x61,0x69,0x53,0x0c,0x0d,0x13,0x1a,0x1d,0x10,0x64,0x6c,0x55,0x0c,0x0d,0x14,0x1b,0x1e,
+ 0x10
+]
+SP = [ # 101 items expected
+ 0x0f,0x0f,0x10,0x10,0x11,0x11,0x12,0x12,0x13,0x14,0x15,0x16,0x16,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1d,0x1f,0x1f,0x20,0x21,0x23,
+ 0x24,0x25,0x25,0x26,0x27,0x29,0x29,0x2a,0x2d,0x2d,0x2f,0x31,0x34,0x34,0x36,0x37,0x39,0x3b,0x3c,0x3f,0x42,0x44,0x46,0x47,0x4a,
+ 0x4c,0x4d,0x50,0x52,0x55,0x56,0x5a,0x5c,0x5f,0x62,0x65,0x69,0x6c,0x6f,0x73,0x76,0x7a,0x7e,0x81,0x84,0x86,0x8b,0x8f,0x94,0x98,
+ 0x9a,0x9e,0xa2,0xa5,0xa9,0xac,0xb1,0xb7,0xbb,0xbd,0xc1,0xc4,0xc8,0xcb,0xcf,0xd3,0xd6,0xdb,0xdf,0xe4,0xe9,0xed,0xf3,0xf7,0xfc,
+ 0xff
+]
+
+Interpolation = [
+ # entry, base, delta, multiplier, bias, attenuation
+ # entry must be 0..100 in increasing order, and the firmware generation code doesn't actually read or use it
+ # (it's for the person typing out these numbers only)
+ # base = 0..31
+ # delta = 0..30
+ # attenuation can't be 0
+ # formula used:
+ # delta_value = gamma[delta][i] - gamma[delta + 1][i]
+ # interpolated[entry][i] = gamma[base][i] + sgn(delta_value) * (abs(delta_value * multiplier) + bias) / attenuation
+ 0, 0, 0, 0, 0, 1,
+ 1, 1, 0, 8, 4, 9,
+ 2, 1, 0, 7, 4, 9,
+ 3, 1, 0, 2, 1, 3,
+ 4, 1, 0, 5, 4, 9,
+ 5, 1, 0, 4, 4, 9,
+ 6, 1, 0, 1, 1, 3,
+ 7, 1, 0, 2, 4, 9,
+ 8, 1, 0, 1, 4, 9,
+ 9, 1, 0, 0, 0, 1,
+ 10, 2, 1, 8, 4, 9,
+ 11, 2, 1, 7, 4, 9,
+ 12, 2, 1, 2, 1, 3,
+ 13, 2, 1, 5, 4, 9,
+ 14, 2, 1, 4, 4, 9,
+ 15, 2, 1, 1, 1, 3,
+ 16, 2, 1, 2, 4, 9,
+ 17, 2, 1, 1, 4, 9,
+ 18, 2, 1, 0, 0, 1,
+ 19, 3, 2, 7, 4, 8,
+ 20, 3, 2, 3, 2, 4,
+ 21, 3, 2, 5, 4, 8,
+ 22, 3, 2, 1, 1, 2,
+ 23, 3, 2, 3, 4, 8,
+ 24, 3, 2, 1, 2, 4,
+ 25, 3, 2, 1, 4, 8,
+ 26, 3, 2, 0, 0, 1,
+ 27, 4, 3, 8, 4, 9,
+ 28, 4, 3, 7, 4, 9,
+ 29, 4, 3, 2, 1, 3,
+ 30, 4, 3, 5, 4, 9,
+ 31, 4, 3, 4, 4, 9,
+ 32, 4, 3, 1, 1, 3,
+ 33, 4, 3, 2, 4, 9,
+ 34, 4, 3, 1, 4, 9,
+ 35, 4, 3, 0, 0, 1,
+ 36, 5, 4, 5, 3, 6,
+ 37, 5, 4, 2, 1, 3,
+ 38, 5, 4, 1, 1, 2,
+ 39, 5, 4, 1, 1, 3,
+ 40, 5, 4, 1, 3, 6,
+ 41, 5, 4, 0, 0, 1,
+ 42, 6, 5, 5, 3, 6,
+ 43, 6, 5, 2, 1, 3,
+ 44, 6, 5, 1, 1, 2,
+ 45, 6, 5, 1, 1, 3,
+ 46, 6, 5, 1, 3, 6,
+ 47, 6, 5, 0, 0, 1,
+ 48, 7, 6, 5, 3, 6,
+ 49, 7, 6, 2, 1, 3,
+ 50, 7, 6, 1, 1, 2,
+ 51, 7, 6, 1, 1, 3,
+ 52, 7, 6, 1, 3, 6,
+ 53, 7, 6, 0, 0, 1,
+ 54, 8, 7, 3, 2, 4,
+ 55, 8, 7, 1, 1, 2,
+ 56, 8, 7, 1, 2, 4,
+ 57, 8, 7, 0, 0, 1,
+ 58, 9, 8, 3, 2, 4,
+ 59, 9, 8, 1, 1, 2,
+ 60, 9, 8, 1, 2, 4,
+ 61, 9, 8, 0, 0, 1,
+ 62, 10, 9, 2, 1, 3,
+ 63, 10, 9, 1, 1, 3,
+ 64, 10, 9, 0, 0, 1,
+ 65, 11, 10, 2, 1, 3,
+ 66, 11, 10, 1, 1, 3,
+ 67, 11, 10, 0, 0, 1,
+ 68, 12, 11, 2, 1, 3,
+ 69, 12, 11, 1, 1, 3,
+ 70, 12, 11, 0, 0, 1,
+ 71, 13, 12, 3, 2, 4,
+ 72, 13, 12, 1, 1, 2,
+ 73, 13, 12, 1, 2, 4,
+ 74, 13, 12, 0, 0, 1,
+ 75, 14, 13, 2, 1, 3,
+ 76, 14, 13, 1, 1, 3,
+ 77, 14, 13, 0, 0, 1,
+ 78, 15, 14, 0, 0, 1,
+ 79, 16, 15, 1, 1, 2,
+ 80, 16, 15, 0, 0, 1,
+ 81, 17, 16, 0, 0, 1,
+ 82, 18, 17, 0, 0, 1,
+ 83, 19, 18, 1, 1, 2,
+ 84, 19, 18, 0, 0, 1,
+ 85, 20, 19, 0, 0, 1,
+ 86, 21, 20, 0, 0, 1,
+ 87, 22, 21, 0, 0, 1,
+ 88, 23, 22, 0, 0, 1,
+ 89, 24, 23, 0, 0, 1,
+ 90, 25, 24, 0, 0, 1,
+ 91, 26, 25, 0, 0, 1,
+ 92, 27, 26, 0, 0, 1,
+ 93, 28, 27, 1, 1, 2,
+ 94, 28, 27, 0, 0, 1,
+ 95, 29, 28, 1, 1, 2,
+ 96, 29, 28, 0, 0, 1,
+ 97, 30, 29, 1, 1, 2,
+ 98, 30, 29, 0, 0, 1,
+ 99, 31, 30, 1, 1, 2,
+ 100, 31, 30, 0, 0, 1,
+]
+
+if len(AOR) != 202:
+ print(f"Unexpected length of AOR: {len(AOR)} != 202")
+ exit(1)
+if len(DELVSS) != 101:
+ print(f"Unexpected length of DELVSS: {len(DELVSS)} != 101")
+ exit(1)
+if len(ACLCutoffAndDelta) < (100 - BrightLevelForACL) * 2:
+ print(f"Not enough items in ACLCutoffAndDelta: {len(ACLCutoffAndDelta)} < (100 - {BrightLevelForACL}) * 2")
+ exit(1)
+if len(ACLCutoffAndDelta) > 200:
+ print(f"Too many items in ACLCutoffAndDelta: {len(ACLCutoffAndDelta)}")
+ exit(1)
+if len(IRC) != 909:
+ print(f"Unexpected length of IRC: {len(IRC)} != 909")
+ exit(1)
+if len(SP) != 101:
+ print(f"Unexpected length of SP: {len(SP)} != 101")
+ exit(1)
+if len(Interpolation) != 606:
+ print(f"Invalid length for the interpolation array: {len(Interpolation)} != 606")
+output = bytes()
+output += len(AOR).to_bytes(2, "little") + bytes(AOR)
+output += len(DELVSS).to_bytes(2, "little") + bytes(DELVSS)
+output += BrightLevelForACL.to_bytes(2, "little")
+output += len(ACLCutoffAndDelta).to_bytes(2, "little") + bytes(ACLCutoffAndDelta)
+output += len(IRC).to_bytes(2, "little") + bytes(IRC)
+output += len(SP).to_bytes(2, "little") + bytes(SP)
+output += (101 * 5).to_bytes(2, "little")
+for i in range(0, 101):
+ [_, b, d, mult, bias, attn] = Interpolation[i * 6:(i + 1) * 6]
+ if b > 31 or d > 30 or b < 0 or d < 0 or attn == 0:
+ print(f"Interpolation has invalid values in row {i}")
+ exit(1)
+ output += bytes([b, d, mult, bias, attn])
+with open("intel_legacy_panel_data.bin", "wb") as f:
+ f.write(output)