mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
sensors/MT9M114: Optimize patch loading.
* Optimize and simplify patch loading by converting firmware patches to byte arrays and stashing patch address at the start of the array. This allows loading patches with just one call to cambus_write_bytes, vs the old 1K short REVs and 1K calls to cambus_write_bytes. Since patch loading is done on every reset at 100KHz, this saves a lot of overhead on script run.
This commit is contained in:
parent
3722a7991f
commit
df49751244
@ -54,123 +54,166 @@ static const uint16_t default_regs[][2] = {
|
||||
{0x3E14, 0xFF39}
|
||||
};
|
||||
|
||||
static const uint16_t patch_0202[] = {
|
||||
0x70cf, 0xffff, 0xc5d4, 0x903a, 0x2144, 0x0c00, 0x2186, 0x0ff3, 0xb844, 0xb948, 0xe082, 0x20cc,
|
||||
0x80e2, 0x21cc, 0x80a2, 0x21cc, 0x80e2, 0xf404, 0xd801, 0xf003, 0xd800, 0x7ee0, 0xc0f1, 0x08ba,
|
||||
0x0600, 0xc1a1, 0x76cf, 0xffff, 0xc130, 0x6e04, 0xc040, 0x71cf, 0xffff, 0xc790, 0x8103, 0x77cf,
|
||||
0xffff, 0xc7c0, 0xe001, 0xa103, 0xd800, 0x0c6a, 0x04e0, 0xb89e, 0x7508, 0x8e1c, 0x0809, 0x0191,
|
||||
0xd801, 0xae1d, 0xe580, 0x20ca, 0x0022, 0x20cf, 0x0522, 0x0c5c, 0x04e2, 0x21ca, 0x0062, 0xe580,
|
||||
0xd901, 0x79c0, 0xd800, 0x0be6, 0x04e0, 0xb89e, 0x70cf, 0xffff, 0xc8d4, 0x9002, 0x0857, 0x025e,
|
||||
0xffdc, 0xe080, 0x25cc, 0x9022, 0xf225, 0x1700, 0x108a, 0x73cf, 0xff00, 0x3174, 0x9307, 0x2a04,
|
||||
0x103e, 0x9328, 0x2942, 0x7140, 0x2a04, 0x107e, 0x9349, 0x2942, 0x7141, 0x2a04, 0x10be, 0x934a,
|
||||
0x2942, 0x714b, 0x2a04, 0x10be, 0x130c, 0x010a, 0x2942, 0x7142, 0x2250, 0x13ca, 0x1b0c, 0x0284,
|
||||
0xb307, 0xb328, 0x1b12, 0x02c4, 0xb34a, 0xed88, 0x71cf, 0xff00, 0x3174, 0x9106, 0xb88f, 0xb106,
|
||||
0x210a, 0x8340, 0xc000, 0x21ca, 0x0062, 0x20f0, 0x0040, 0x0b02, 0x0320, 0xd901, 0x07f1, 0x05e0,
|
||||
0xc0a1, 0x78e0, 0xc0f1, 0x71cf, 0xffff, 0xc7c0, 0xd840, 0xa900, 0x71cf, 0xffff, 0xd02c, 0xd81e,
|
||||
0x0a5a, 0x04e0, 0xda00, 0xd800, 0xc0d1, 0x7ee0
|
||||
static const uint8_t patch_0202[] = {
|
||||
0xd0, 0x00, 0x70, 0xcf, 0xff, 0xff, 0xc5, 0xd4, 0x90, 0x3a, 0x21, 0x44, 0x0c, 0x00, 0x21, 0x86,
|
||||
0x0f, 0xf3, 0xb8, 0x44, 0xb9, 0x48, 0xe0, 0x82, 0x20, 0xcc, 0x80, 0xe2, 0x21, 0xcc, 0x80, 0xa2,
|
||||
0x21, 0xcc, 0x80, 0xe2, 0xf4, 0x04, 0xd8, 0x01, 0xf0, 0x03, 0xd8, 0x00, 0x7e, 0xe0, 0xc0, 0xf1,
|
||||
0x08, 0xba, 0x06, 0x00, 0xc1, 0xa1, 0x76, 0xcf, 0xff, 0xff, 0xc1, 0x30, 0x6e, 0x04, 0xc0, 0x40,
|
||||
0x71, 0xcf, 0xff, 0xff, 0xc7, 0x90, 0x81, 0x03, 0x77, 0xcf, 0xff, 0xff, 0xc7, 0xc0, 0xe0, 0x01,
|
||||
0xa1, 0x03, 0xd8, 0x00, 0x0c, 0x6a, 0x04, 0xe0, 0xb8, 0x9e, 0x75, 0x08, 0x8e, 0x1c, 0x08, 0x09,
|
||||
0x01, 0x91, 0xd8, 0x01, 0xae, 0x1d, 0xe5, 0x80, 0x20, 0xca, 0x00, 0x22, 0x20, 0xcf, 0x05, 0x22,
|
||||
0x0c, 0x5c, 0x04, 0xe2, 0x21, 0xca, 0x00, 0x62, 0xe5, 0x80, 0xd9, 0x01, 0x79, 0xc0, 0xd8, 0x00,
|
||||
0x0b, 0xe6, 0x04, 0xe0, 0xb8, 0x9e, 0x70, 0xcf, 0xff, 0xff, 0xc8, 0xd4, 0x90, 0x02, 0x08, 0x57,
|
||||
0x02, 0x5e, 0xff, 0xdc, 0xe0, 0x80, 0x25, 0xcc, 0x90, 0x22, 0xf2, 0x25, 0x17, 0x00, 0x10, 0x8a,
|
||||
0x73, 0xcf, 0xff, 0x00, 0x31, 0x74, 0x93, 0x07, 0x2a, 0x04, 0x10, 0x3e, 0x93, 0x28, 0x29, 0x42,
|
||||
0x71, 0x40, 0x2a, 0x04, 0x10, 0x7e, 0x93, 0x49, 0x29, 0x42, 0x71, 0x41, 0x2a, 0x04, 0x10, 0xbe,
|
||||
0x93, 0x4a, 0x29, 0x42, 0x71, 0x4b, 0x2a, 0x04, 0x10, 0xbe, 0x13, 0x0c, 0x01, 0x0a, 0x29, 0x42,
|
||||
0x71, 0x42, 0x22, 0x50, 0x13, 0xca, 0x1b, 0x0c, 0x02, 0x84, 0xb3, 0x07, 0xb3, 0x28, 0x1b, 0x12,
|
||||
0x02, 0xc4, 0xb3, 0x4a, 0xed, 0x88, 0x71, 0xcf, 0xff, 0x00, 0x31, 0x74, 0x91, 0x06, 0xb8, 0x8f,
|
||||
0xb1, 0x06, 0x21, 0x0a, 0x83, 0x40, 0xc0, 0x00, 0x21, 0xca, 0x00, 0x62, 0x20, 0xf0, 0x00, 0x40,
|
||||
0x0b, 0x02, 0x03, 0x20, 0xd9, 0x01, 0x07, 0xf1, 0x05, 0xe0, 0xc0, 0xa1, 0x78, 0xe0, 0xc0, 0xf1,
|
||||
0x71, 0xcf, 0xff, 0xff, 0xc7, 0xc0, 0xd8, 0x40, 0xa9, 0x00, 0x71, 0xcf, 0xff, 0xff, 0xd0, 0x2c,
|
||||
0xd8, 0x1e, 0x0a, 0x5a, 0x04, 0xe0, 0xda, 0x00, 0xd8, 0x00, 0xc0, 0xd1, 0x7e, 0xe0
|
||||
};
|
||||
|
||||
static const uint16_t patch_0302[] = {
|
||||
0x70cf, 0xffff, 0xc5d4, 0x903a, 0x2144, 0x0c00, 0x2186, 0x0ff3, 0xb844, 0x262f, 0xf008, 0xb948,
|
||||
0x21cc, 0x8021, 0xd801, 0xf203, 0xd800, 0x7ee0, 0xc0f1, 0x71cf, 0xffff, 0xc610, 0x910e, 0x208c,
|
||||
0x8014, 0xf418, 0x910f, 0x208c, 0x800f, 0xf414, 0x9116, 0x208c, 0x800a, 0xf410, 0x9117, 0x208c,
|
||||
0x8807, 0xf40c, 0x9118, 0x2086, 0x0ff3, 0xb848, 0x080d, 0x0090, 0xffea, 0xe081, 0xd801, 0xf203,
|
||||
0xd800, 0xc0d1, 0x7ee0, 0x78e0, 0xc0f1, 0x71cf, 0xffff, 0xc610, 0x910e, 0x208c, 0x800a, 0xf418,
|
||||
0x910f, 0x208c, 0x8807, 0xf414, 0x9116, 0x208c, 0x800a, 0xf410, 0x9117, 0x208c, 0x8807, 0xf40c,
|
||||
0x9118, 0x2086, 0x0ff3, 0xb848, 0x080d, 0x0090, 0xffd9, 0xe080, 0xd801, 0xf203, 0xd800, 0xf1df,
|
||||
0x9040, 0x71cf, 0xffff, 0xc5d4, 0xb15a, 0x9041, 0x73cf, 0xffff, 0xc7d0, 0xb140, 0x9042, 0xb141,
|
||||
0x9043, 0xb142, 0x9044, 0xb143, 0x9045, 0xb147, 0x9046, 0xb148, 0x9047, 0xb14b, 0x9048, 0xb14c,
|
||||
0x9049, 0x1958, 0x0084, 0x904a, 0x195a, 0x0084, 0x8856, 0x1b36, 0x8082, 0x8857, 0x1b37, 0x8082,
|
||||
0x904c, 0x19a7, 0x009c, 0x881a, 0x7fe0, 0x1b54, 0x8002, 0x78e0, 0x71cf, 0xffff, 0xc350, 0xd828,
|
||||
0xa90b, 0x8100, 0x01c5, 0x0320, 0xd900, 0x78e0, 0x220a, 0x1f80, 0xffff, 0xd4e0, 0xc0f1, 0x0811,
|
||||
0x0051, 0x2240, 0x1200, 0xffe1, 0xd801, 0xf006, 0x2240, 0x1900, 0xffde, 0xd802, 0x1a05, 0x1002,
|
||||
0xfff2, 0xf195, 0xc0f1, 0x0e7e, 0x05c0, 0x75cf, 0xffff, 0xc84c, 0x9502, 0x77cf, 0xffff, 0xc344,
|
||||
0x2044, 0x008e, 0xb8a1, 0x0926, 0x03e0, 0xb502, 0x9502, 0x952e, 0x7e05, 0xb5c2, 0x70cf, 0xffff,
|
||||
0xc610, 0x099a, 0x04a0, 0xb026, 0x0e02, 0x0560, 0xde00, 0x0a12, 0x0320, 0xb7c4, 0x0b36, 0x03a0,
|
||||
0x70c9, 0x9502, 0x7608, 0xb8a8, 0xb502, 0x70cf, 0x0000, 0x5536, 0x7860, 0x2686, 0x1ffb, 0x9502,
|
||||
0x78c5, 0x0631, 0x05e0, 0xb502, 0x72cf, 0xffff, 0xc5d4, 0x923a, 0x73cf, 0xffff, 0xc7d0, 0xb020,
|
||||
0x9220, 0xb021, 0x9221, 0xb022, 0x9222, 0xb023, 0x9223, 0xb024, 0x9227, 0xb025, 0x9228, 0xb026,
|
||||
0x922b, 0xb027, 0x922c, 0xb028, 0x1258, 0x0101, 0xb029, 0x125a, 0x0101, 0xb02a, 0x1336, 0x8081,
|
||||
0xa836, 0x1337, 0x8081, 0xa837, 0x12a7, 0x0701, 0xb02c, 0x1354, 0x8081, 0x7fe0, 0xa83a, 0x78e0,
|
||||
0xc0f1, 0x0dc2, 0x05c0, 0x7608, 0x09bb, 0x0010, 0x75cf, 0xffff, 0xd4e0, 0x8d21, 0x8d00, 0x2153,
|
||||
0x0003, 0xb8c0, 0x8d45, 0x0b23, 0x0000, 0xea8f, 0x0915, 0x001e, 0xff81, 0xe808, 0x2540, 0x1900,
|
||||
0xffde, 0x8d00, 0xb880, 0xf004, 0x8d00, 0xb8a0, 0xad00, 0x8d05, 0xe081, 0x20cc, 0x80a2, 0xdf00,
|
||||
0xf40a, 0x71cf, 0xffff, 0xc84c, 0x9102, 0x7708, 0xb8a6, 0x2786, 0x1ffe, 0xb102, 0x0b42, 0x0180,
|
||||
0x0e3e, 0x0180, 0x0f4a, 0x0160, 0x70c9, 0x8d05, 0xe081, 0x20cc, 0x80a2, 0xf429, 0x76cf, 0xffff,
|
||||
0xc84c, 0x082d, 0x0051, 0x70cf, 0xffff, 0xc90c, 0x8805, 0x09b6, 0x0360, 0xd908, 0x2099, 0x0802,
|
||||
0x9634, 0xb503, 0x7902, 0x1523, 0x1080, 0xb634, 0xe001, 0x1d23, 0x1002, 0xf00b, 0x9634, 0x9503,
|
||||
0x6038, 0xb614, 0x153f, 0x1080, 0xe001, 0x1d3f, 0x1002, 0xffa4, 0x9602, 0x7f05, 0xd800, 0xb6e2,
|
||||
0xad05, 0x0511, 0x05e0, 0xd800, 0xc0f1, 0x0cfe, 0x05c0, 0x0a96, 0x05a0, 0x7608, 0x0c22, 0x0240,
|
||||
0xe080, 0x20ca, 0x0f82, 0x0000, 0x190b, 0x0c60, 0x05a2, 0x21ca, 0x0022, 0x0c56, 0x0240, 0xe806,
|
||||
0x0e0e, 0x0220, 0x70c9, 0xf048, 0x0896, 0x0440, 0x0e96, 0x0400, 0x0966, 0x0380, 0x75cf, 0xffff,
|
||||
0xd4e0, 0x8d00, 0x084d, 0x001e, 0xff47, 0x080d, 0x0050, 0xff57, 0x0841, 0x0051, 0x8d04, 0x9521,
|
||||
0xe064, 0x790c, 0x702f, 0x0ce2, 0x05e0, 0xd964, 0x72cf, 0xffff, 0xc700, 0x9235, 0x0811, 0x0043,
|
||||
0xff3d, 0x080d, 0x0051, 0xd801, 0xff77, 0xf025, 0x9501, 0x9235, 0x0911, 0x0003, 0xff49, 0x080d,
|
||||
0x0051, 0xd800, 0xff72, 0xf01b, 0x0886, 0x03e0, 0xd801, 0x0ef6, 0x03c0, 0x0f52, 0x0340, 0x0dba,
|
||||
0x0200, 0x0af6, 0x0440, 0x0c22, 0x0400, 0x0d72, 0x0440, 0x0dc2, 0x0200, 0x0972, 0x0440, 0x0d3a,
|
||||
0x0220, 0xd820, 0x0bfa, 0x0260, 0x70c9, 0x0451, 0x05c0, 0x78e0, 0xd900, 0xf00a, 0x70cf, 0xffff,
|
||||
0xd520, 0x7835, 0x8041, 0x8000, 0xe102, 0xa040, 0x09f1, 0x8114, 0x71cf, 0xffff, 0xd4e0, 0x70cf,
|
||||
0xffff, 0xc594, 0xb03a, 0x7fe0, 0xd800, 0x0000, 0x0000, 0x0500, 0x0500, 0x0200, 0x0330, 0x0000,
|
||||
0x0000, 0x03cd, 0x050d, 0x01c5, 0x03b3, 0x00e0, 0x01e3, 0x0280, 0x01e0, 0x0109, 0x0080, 0x0500,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0xffff, 0xc9b4, 0xffff, 0xd324, 0xffff, 0xca34, 0xffff, 0xd3ec
|
||||
static const uint8_t patch_0302[] = {
|
||||
0xd1, 0x2c, 0x70, 0xcf, 0xff, 0xff, 0xc5, 0xd4, 0x90, 0x3a, 0x21, 0x44, 0x0c, 0x00, 0x21, 0x86,
|
||||
0x0f, 0xf3, 0xb8, 0x44, 0x26, 0x2f, 0xf0, 0x08, 0xb9, 0x48, 0x21, 0xcc, 0x80, 0x21, 0xd8, 0x01,
|
||||
0xf2, 0x03, 0xd8, 0x00, 0x7e, 0xe0, 0xc0, 0xf1, 0x71, 0xcf, 0xff, 0xff, 0xc6, 0x10, 0x91, 0x0e,
|
||||
0x20, 0x8c, 0x80, 0x14, 0xf4, 0x18, 0x91, 0x0f, 0x20, 0x8c, 0x80, 0x0f, 0xf4, 0x14, 0x91, 0x16,
|
||||
0x20, 0x8c, 0x80, 0x0a, 0xf4, 0x10, 0x91, 0x17, 0x20, 0x8c, 0x88, 0x07, 0xf4, 0x0c, 0x91, 0x18,
|
||||
0x20, 0x86, 0x0f, 0xf3, 0xb8, 0x48, 0x08, 0x0d, 0x00, 0x90, 0xff, 0xea, 0xe0, 0x81, 0xd8, 0x01,
|
||||
0xf2, 0x03, 0xd8, 0x00, 0xc0, 0xd1, 0x7e, 0xe0, 0x78, 0xe0, 0xc0, 0xf1, 0x71, 0xcf, 0xff, 0xff,
|
||||
0xc6, 0x10, 0x91, 0x0e, 0x20, 0x8c, 0x80, 0x0a, 0xf4, 0x18, 0x91, 0x0f, 0x20, 0x8c, 0x88, 0x07,
|
||||
0xf4, 0x14, 0x91, 0x16, 0x20, 0x8c, 0x80, 0x0a, 0xf4, 0x10, 0x91, 0x17, 0x20, 0x8c, 0x88, 0x07,
|
||||
0xf4, 0x0c, 0x91, 0x18, 0x20, 0x86, 0x0f, 0xf3, 0xb8, 0x48, 0x08, 0x0d, 0x00, 0x90, 0xff, 0xd9,
|
||||
0xe0, 0x80, 0xd8, 0x01, 0xf2, 0x03, 0xd8, 0x00, 0xf1, 0xdf, 0x90, 0x40, 0x71, 0xcf, 0xff, 0xff,
|
||||
0xc5, 0xd4, 0xb1, 0x5a, 0x90, 0x41, 0x73, 0xcf, 0xff, 0xff, 0xc7, 0xd0, 0xb1, 0x40, 0x90, 0x42,
|
||||
0xb1, 0x41, 0x90, 0x43, 0xb1, 0x42, 0x90, 0x44, 0xb1, 0x43, 0x90, 0x45, 0xb1, 0x47, 0x90, 0x46,
|
||||
0xb1, 0x48, 0x90, 0x47, 0xb1, 0x4b, 0x90, 0x48, 0xb1, 0x4c, 0x90, 0x49, 0x19, 0x58, 0x00, 0x84,
|
||||
0x90, 0x4a, 0x19, 0x5a, 0x00, 0x84, 0x88, 0x56, 0x1b, 0x36, 0x80, 0x82, 0x88, 0x57, 0x1b, 0x37,
|
||||
0x80, 0x82, 0x90, 0x4c, 0x19, 0xa7, 0x00, 0x9c, 0x88, 0x1a, 0x7f, 0xe0, 0x1b, 0x54, 0x80, 0x02,
|
||||
0x78, 0xe0, 0x71, 0xcf, 0xff, 0xff, 0xc3, 0x50, 0xd8, 0x28, 0xa9, 0x0b, 0x81, 0x00, 0x01, 0xc5,
|
||||
0x03, 0x20, 0xd9, 0x00, 0x78, 0xe0, 0x22, 0x0a, 0x1f, 0x80, 0xff, 0xff, 0xd4, 0xe0, 0xc0, 0xf1,
|
||||
0x08, 0x11, 0x00, 0x51, 0x22, 0x40, 0x12, 0x00, 0xff, 0xe1, 0xd8, 0x01, 0xf0, 0x06, 0x22, 0x40,
|
||||
0x19, 0x00, 0xff, 0xde, 0xd8, 0x02, 0x1a, 0x05, 0x10, 0x02, 0xff, 0xf2, 0xf1, 0x95, 0xc0, 0xf1,
|
||||
0x0e, 0x7e, 0x05, 0xc0, 0x75, 0xcf, 0xff, 0xff, 0xc8, 0x4c, 0x95, 0x02, 0x77, 0xcf, 0xff, 0xff,
|
||||
0xc3, 0x44, 0x20, 0x44, 0x00, 0x8e, 0xb8, 0xa1, 0x09, 0x26, 0x03, 0xe0, 0xb5, 0x02, 0x95, 0x02,
|
||||
0x95, 0x2e, 0x7e, 0x05, 0xb5, 0xc2, 0x70, 0xcf, 0xff, 0xff, 0xc6, 0x10, 0x09, 0x9a, 0x04, 0xa0,
|
||||
0xb0, 0x26, 0x0e, 0x02, 0x05, 0x60, 0xde, 0x00, 0x0a, 0x12, 0x03, 0x20, 0xb7, 0xc4, 0x0b, 0x36,
|
||||
0x03, 0xa0, 0x70, 0xc9, 0x95, 0x02, 0x76, 0x08, 0xb8, 0xa8, 0xb5, 0x02, 0x70, 0xcf, 0x00, 0x00,
|
||||
0x55, 0x36, 0x78, 0x60, 0x26, 0x86, 0x1f, 0xfb, 0x95, 0x02, 0x78, 0xc5, 0x06, 0x31, 0x05, 0xe0,
|
||||
0xb5, 0x02, 0x72, 0xcf, 0xff, 0xff, 0xc5, 0xd4, 0x92, 0x3a, 0x73, 0xcf, 0xff, 0xff, 0xc7, 0xd0,
|
||||
0xb0, 0x20, 0x92, 0x20, 0xb0, 0x21, 0x92, 0x21, 0xb0, 0x22, 0x92, 0x22, 0xb0, 0x23, 0x92, 0x23,
|
||||
0xb0, 0x24, 0x92, 0x27, 0xb0, 0x25, 0x92, 0x28, 0xb0, 0x26, 0x92, 0x2b, 0xb0, 0x27, 0x92, 0x2c,
|
||||
0xb0, 0x28, 0x12, 0x58, 0x01, 0x01, 0xb0, 0x29, 0x12, 0x5a, 0x01, 0x01, 0xb0, 0x2a, 0x13, 0x36,
|
||||
0x80, 0x81, 0xa8, 0x36, 0x13, 0x37, 0x80, 0x81, 0xa8, 0x37, 0x12, 0xa7, 0x07, 0x01, 0xb0, 0x2c,
|
||||
0x13, 0x54, 0x80, 0x81, 0x7f, 0xe0, 0xa8, 0x3a, 0x78, 0xe0, 0xc0, 0xf1, 0x0d, 0xc2, 0x05, 0xc0,
|
||||
0x76, 0x08, 0x09, 0xbb, 0x00, 0x10, 0x75, 0xcf, 0xff, 0xff, 0xd4, 0xe0, 0x8d, 0x21, 0x8d, 0x00,
|
||||
0x21, 0x53, 0x00, 0x03, 0xb8, 0xc0, 0x8d, 0x45, 0x0b, 0x23, 0x00, 0x00, 0xea, 0x8f, 0x09, 0x15,
|
||||
0x00, 0x1e, 0xff, 0x81, 0xe8, 0x08, 0x25, 0x40, 0x19, 0x00, 0xff, 0xde, 0x8d, 0x00, 0xb8, 0x80,
|
||||
0xf0, 0x04, 0x8d, 0x00, 0xb8, 0xa0, 0xad, 0x00, 0x8d, 0x05, 0xe0, 0x81, 0x20, 0xcc, 0x80, 0xa2,
|
||||
0xdf, 0x00, 0xf4, 0x0a, 0x71, 0xcf, 0xff, 0xff, 0xc8, 0x4c, 0x91, 0x02, 0x77, 0x08, 0xb8, 0xa6,
|
||||
0x27, 0x86, 0x1f, 0xfe, 0xb1, 0x02, 0x0b, 0x42, 0x01, 0x80, 0x0e, 0x3e, 0x01, 0x80, 0x0f, 0x4a,
|
||||
0x01, 0x60, 0x70, 0xc9, 0x8d, 0x05, 0xe0, 0x81, 0x20, 0xcc, 0x80, 0xa2, 0xf4, 0x29, 0x76, 0xcf,
|
||||
0xff, 0xff, 0xc8, 0x4c, 0x08, 0x2d, 0x00, 0x51, 0x70, 0xcf, 0xff, 0xff, 0xc9, 0x0c, 0x88, 0x05,
|
||||
0x09, 0xb6, 0x03, 0x60, 0xd9, 0x08, 0x20, 0x99, 0x08, 0x02, 0x96, 0x34, 0xb5, 0x03, 0x79, 0x02,
|
||||
0x15, 0x23, 0x10, 0x80, 0xb6, 0x34, 0xe0, 0x01, 0x1d, 0x23, 0x10, 0x02, 0xf0, 0x0b, 0x96, 0x34,
|
||||
0x95, 0x03, 0x60, 0x38, 0xb6, 0x14, 0x15, 0x3f, 0x10, 0x80, 0xe0, 0x01, 0x1d, 0x3f, 0x10, 0x02,
|
||||
0xff, 0xa4, 0x96, 0x02, 0x7f, 0x05, 0xd8, 0x00, 0xb6, 0xe2, 0xad, 0x05, 0x05, 0x11, 0x05, 0xe0,
|
||||
0xd8, 0x00, 0xc0, 0xf1, 0x0c, 0xfe, 0x05, 0xc0, 0x0a, 0x96, 0x05, 0xa0, 0x76, 0x08, 0x0c, 0x22,
|
||||
0x02, 0x40, 0xe0, 0x80, 0x20, 0xca, 0x0f, 0x82, 0x00, 0x00, 0x19, 0x0b, 0x0c, 0x60, 0x05, 0xa2,
|
||||
0x21, 0xca, 0x00, 0x22, 0x0c, 0x56, 0x02, 0x40, 0xe8, 0x06, 0x0e, 0x0e, 0x02, 0x20, 0x70, 0xc9,
|
||||
0xf0, 0x48, 0x08, 0x96, 0x04, 0x40, 0x0e, 0x96, 0x04, 0x00, 0x09, 0x66, 0x03, 0x80, 0x75, 0xcf,
|
||||
0xff, 0xff, 0xd4, 0xe0, 0x8d, 0x00, 0x08, 0x4d, 0x00, 0x1e, 0xff, 0x47, 0x08, 0x0d, 0x00, 0x50,
|
||||
0xff, 0x57, 0x08, 0x41, 0x00, 0x51, 0x8d, 0x04, 0x95, 0x21, 0xe0, 0x64, 0x79, 0x0c, 0x70, 0x2f,
|
||||
0x0c, 0xe2, 0x05, 0xe0, 0xd9, 0x64, 0x72, 0xcf, 0xff, 0xff, 0xc7, 0x00, 0x92, 0x35, 0x08, 0x11,
|
||||
0x00, 0x43, 0xff, 0x3d, 0x08, 0x0d, 0x00, 0x51, 0xd8, 0x01, 0xff, 0x77, 0xf0, 0x25, 0x95, 0x01,
|
||||
0x92, 0x35, 0x09, 0x11, 0x00, 0x03, 0xff, 0x49, 0x08, 0x0d, 0x00, 0x51, 0xd8, 0x00, 0xff, 0x72,
|
||||
0xf0, 0x1b, 0x08, 0x86, 0x03, 0xe0, 0xd8, 0x01, 0x0e, 0xf6, 0x03, 0xc0, 0x0f, 0x52, 0x03, 0x40,
|
||||
0x0d, 0xba, 0x02, 0x00, 0x0a, 0xf6, 0x04, 0x40, 0x0c, 0x22, 0x04, 0x00, 0x0d, 0x72, 0x04, 0x40,
|
||||
0x0d, 0xc2, 0x02, 0x00, 0x09, 0x72, 0x04, 0x40, 0x0d, 0x3a, 0x02, 0x20, 0xd8, 0x20, 0x0b, 0xfa,
|
||||
0x02, 0x60, 0x70, 0xc9, 0x04, 0x51, 0x05, 0xc0, 0x78, 0xe0, 0xd9, 0x00, 0xf0, 0x0a, 0x70, 0xcf,
|
||||
0xff, 0xff, 0xd5, 0x20, 0x78, 0x35, 0x80, 0x41, 0x80, 0x00, 0xe1, 0x02, 0xa0, 0x40, 0x09, 0xf1,
|
||||
0x81, 0x14, 0x71, 0xcf, 0xff, 0xff, 0xd4, 0xe0, 0x70, 0xcf, 0xff, 0xff, 0xc5, 0x94, 0xb0, 0x3a,
|
||||
0x7f, 0xe0, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x02, 0x00, 0x03, 0x30,
|
||||
0x00, 0x00, 0x00, 0x00, 0x03, 0xcd, 0x05, 0x0d, 0x01, 0xc5, 0x03, 0xb3, 0x00, 0xe0, 0x01, 0xe3,
|
||||
0x02, 0x80, 0x01, 0xe0, 0x01, 0x09, 0x00, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc9, 0xb4, 0xff, 0xff, 0xd3, 0x24, 0xff, 0xff,
|
||||
0xca, 0x34, 0xff, 0xff, 0xd3, 0xec
|
||||
};
|
||||
|
||||
static const uint16_t patch_0402[] = {
|
||||
0xc0f1, 0x0bba, 0x05c0, 0xc1a2, 0x75cf, 0xffff, 0xc7c0, 0xde00, 0x1c05, 0x3382, 0xc661, 0x08c3,
|
||||
0x0040, 0xe1d1, 0xf217, 0xe1d4, 0xf45b, 0x8d01, 0x08b3, 0x001e, 0x1c00, 0x3f80, 0x000c, 0x3500,
|
||||
0x718b, 0x0fbe, 0x04e0, 0x70c9, 0x0806, 0x0520, 0x70c9, 0x9525, 0x70cf, 0xff00, 0x0000, 0xb039,
|
||||
0xf047, 0x8d01, 0x0827, 0x00df, 0x8d02, 0x081d, 0x001e, 0x8d02, 0xad01, 0x8d01, 0xb8a3, 0xad01,
|
||||
0x70cf, 0xff00, 0x0000, 0x9019, 0xb505, 0xf005, 0x8d01, 0xb8a0, 0xad01, 0x8d01, 0x0811, 0x00de,
|
||||
0x8d01, 0xb8a3, 0xad01, 0x0d02, 0x04a0, 0xd801, 0x8d01, 0x0853, 0x001e, 0x8501, 0x0b5e, 0x05e0,
|
||||
0x218a, 0x041f, 0x9524, 0x2905, 0x003e, 0x1c00, 0x3e40, 0x718b, 0x0f4e, 0x04e0, 0xd800, 0x0f9a,
|
||||
0x04e0, 0xd800, 0xd800, 0x0fb6, 0x04e0, 0xd901, 0x8d01, 0x0823, 0x005f, 0x208a, 0x001c, 0x0be2,
|
||||
0x04e0, 0xd900, 0xd80d, 0xb80a, 0x0bd6, 0x04e0, 0xd900, 0xd890, 0x0bea, 0x04e0, 0xd901, 0xd800,
|
||||
0x02f5, 0x05e0, 0xc0a2, 0x78e0, 0xc0f1, 0x73cf, 0xffff, 0xc7c0, 0x8b41, 0x0a0d, 0x00de, 0x8b41,
|
||||
0x0a0f, 0x005e, 0x72cf, 0x0000, 0x403e, 0x7a40, 0xf002, 0xd800, 0xc0d1, 0x7ee0, 0xc0f1, 0xc5e1,
|
||||
0x75cf, 0xffff, 0xc7c0, 0xd900, 0xf009, 0x70cf, 0xffff, 0xd740, 0x7835, 0x8041, 0x8000, 0xe102,
|
||||
0xa040, 0x09f3, 0x8094, 0x71cf, 0xffff, 0xd6d0, 0xd803, 0x0d1e, 0x04a0, 0xda00, 0x70cf, 0xffff,
|
||||
0xd530, 0x0c22, 0x0300, 0xe887, 0x70cf, 0xffff, 0xd6e8, 0x094a, 0x0240, 0x218a, 0x0a0f, 0xb524,
|
||||
0xd904, 0xad23, 0x1d04, 0x1f80, 0x016e, 0x3600, 0x0279, 0x05c0, 0xc0f1, 0x71cf, 0xffff, 0xc350,
|
||||
0x1109, 0x00c0, 0x73cf, 0xffff, 0xc164, 0xe0d2, 0x72cf, 0xffff, 0xc7c0, 0xf412, 0x8b08, 0x0821,
|
||||
0x03d1, 0x8a01, 0x0819, 0x00df, 0xd854, 0xa90b, 0xd800, 0xa908, 0x8a21, 0xb983, 0xaa21, 0xaa0c,
|
||||
0x0be6, 0x0480, 0xf1b2, 0x78e0, 0xc0f1, 0x70cf, 0xffff, 0xc7c0, 0x8801, 0xb8e0, 0x0fb4, 0xffc2,
|
||||
0x0e9a, 0x0240, 0xf1a6, 0x78e0, 0xc0f1, 0x71cf, 0xffff, 0xc7c0, 0x8961, 0x72cf, 0xffff, 0xc350,
|
||||
0x0b45, 0x00de, 0x0841, 0x0811, 0x890c, 0xe001, 0xa90c, 0x896c, 0x8903, 0x0b0d, 0x0003, 0x8902,
|
||||
0x082d, 0x009e, 0x8902, 0x0813, 0x009e, 0x8902, 0xb8a2, 0xa902, 0x8901, 0xb882, 0xf003, 0x8901,
|
||||
0xb8a2, 0xa901, 0xd850, 0xaa0b, 0xd900, 0xaa2a, 0xaa28, 0x0cca, 0x02e0, 0x8200, 0xd800, 0xf17a,
|
||||
0xffff, 0xcad0, 0xffff, 0xd610
|
||||
static const uint8_t patch_0402[] = {
|
||||
0xd5, 0x30, 0xc0, 0xf1, 0x0b, 0xba, 0x05, 0xc0, 0xc1, 0xa2, 0x75, 0xcf, 0xff, 0xff, 0xc7, 0xc0,
|
||||
0xde, 0x00, 0x1c, 0x05, 0x33, 0x82, 0xc6, 0x61, 0x08, 0xc3, 0x00, 0x40, 0xe1, 0xd1, 0xf2, 0x17,
|
||||
0xe1, 0xd4, 0xf4, 0x5b, 0x8d, 0x01, 0x08, 0xb3, 0x00, 0x1e, 0x1c, 0x00, 0x3f, 0x80, 0x00, 0x0c,
|
||||
0x35, 0x00, 0x71, 0x8b, 0x0f, 0xbe, 0x04, 0xe0, 0x70, 0xc9, 0x08, 0x06, 0x05, 0x20, 0x70, 0xc9,
|
||||
0x95, 0x25, 0x70, 0xcf, 0xff, 0x00, 0x00, 0x00, 0xb0, 0x39, 0xf0, 0x47, 0x8d, 0x01, 0x08, 0x27,
|
||||
0x00, 0xdf, 0x8d, 0x02, 0x08, 0x1d, 0x00, 0x1e, 0x8d, 0x02, 0xad, 0x01, 0x8d, 0x01, 0xb8, 0xa3,
|
||||
0xad, 0x01, 0x70, 0xcf, 0xff, 0x00, 0x00, 0x00, 0x90, 0x19, 0xb5, 0x05, 0xf0, 0x05, 0x8d, 0x01,
|
||||
0xb8, 0xa0, 0xad, 0x01, 0x8d, 0x01, 0x08, 0x11, 0x00, 0xde, 0x8d, 0x01, 0xb8, 0xa3, 0xad, 0x01,
|
||||
0x0d, 0x02, 0x04, 0xa0, 0xd8, 0x01, 0x8d, 0x01, 0x08, 0x53, 0x00, 0x1e, 0x85, 0x01, 0x0b, 0x5e,
|
||||
0x05, 0xe0, 0x21, 0x8a, 0x04, 0x1f, 0x95, 0x24, 0x29, 0x05, 0x00, 0x3e, 0x1c, 0x00, 0x3e, 0x40,
|
||||
0x71, 0x8b, 0x0f, 0x4e, 0x04, 0xe0, 0xd8, 0x00, 0x0f, 0x9a, 0x04, 0xe0, 0xd8, 0x00, 0xd8, 0x00,
|
||||
0x0f, 0xb6, 0x04, 0xe0, 0xd9, 0x01, 0x8d, 0x01, 0x08, 0x23, 0x00, 0x5f, 0x20, 0x8a, 0x00, 0x1c,
|
||||
0x0b, 0xe2, 0x04, 0xe0, 0xd9, 0x00, 0xd8, 0x0d, 0xb8, 0x0a, 0x0b, 0xd6, 0x04, 0xe0, 0xd9, 0x00,
|
||||
0xd8, 0x90, 0x0b, 0xea, 0x04, 0xe0, 0xd9, 0x01, 0xd8, 0x00, 0x02, 0xf5, 0x05, 0xe0, 0xc0, 0xa2,
|
||||
0x78, 0xe0, 0xc0, 0xf1, 0x73, 0xcf, 0xff, 0xff, 0xc7, 0xc0, 0x8b, 0x41, 0x0a, 0x0d, 0x00, 0xde,
|
||||
0x8b, 0x41, 0x0a, 0x0f, 0x00, 0x5e, 0x72, 0xcf, 0x00, 0x00, 0x40, 0x3e, 0x7a, 0x40, 0xf0, 0x02,
|
||||
0xd8, 0x00, 0xc0, 0xd1, 0x7e, 0xe0, 0xc0, 0xf1, 0xc5, 0xe1, 0x75, 0xcf, 0xff, 0xff, 0xc7, 0xc0,
|
||||
0xd9, 0x00, 0xf0, 0x09, 0x70, 0xcf, 0xff, 0xff, 0xd7, 0x40, 0x78, 0x35, 0x80, 0x41, 0x80, 0x00,
|
||||
0xe1, 0x02, 0xa0, 0x40, 0x09, 0xf3, 0x80, 0x94, 0x71, 0xcf, 0xff, 0xff, 0xd6, 0xd0, 0xd8, 0x03,
|
||||
0x0d, 0x1e, 0x04, 0xa0, 0xda, 0x00, 0x70, 0xcf, 0xff, 0xff, 0xd5, 0x30, 0x0c, 0x22, 0x03, 0x00,
|
||||
0xe8, 0x87, 0x70, 0xcf, 0xff, 0xff, 0xd6, 0xe8, 0x09, 0x4a, 0x02, 0x40, 0x21, 0x8a, 0x0a, 0x0f,
|
||||
0xb5, 0x24, 0xd9, 0x04, 0xad, 0x23, 0x1d, 0x04, 0x1f, 0x80, 0x01, 0x6e, 0x36, 0x00, 0x02, 0x79,
|
||||
0x05, 0xc0, 0xc0, 0xf1, 0x71, 0xcf, 0xff, 0xff, 0xc3, 0x50, 0x11, 0x09, 0x00, 0xc0, 0x73, 0xcf,
|
||||
0xff, 0xff, 0xc1, 0x64, 0xe0, 0xd2, 0x72, 0xcf, 0xff, 0xff, 0xc7, 0xc0, 0xf4, 0x12, 0x8b, 0x08,
|
||||
0x08, 0x21, 0x03, 0xd1, 0x8a, 0x01, 0x08, 0x19, 0x00, 0xdf, 0xd8, 0x54, 0xa9, 0x0b, 0xd8, 0x00,
|
||||
0xa9, 0x08, 0x8a, 0x21, 0xb9, 0x83, 0xaa, 0x21, 0xaa, 0x0c, 0x0b, 0xe6, 0x04, 0x80, 0xf1, 0xb2,
|
||||
0x78, 0xe0, 0xc0, 0xf1, 0x70, 0xcf, 0xff, 0xff, 0xc7, 0xc0, 0x88, 0x01, 0xb8, 0xe0, 0x0f, 0xb4,
|
||||
0xff, 0xc2, 0x0e, 0x9a, 0x02, 0x40, 0xf1, 0xa6, 0x78, 0xe0, 0xc0, 0xf1, 0x71, 0xcf, 0xff, 0xff,
|
||||
0xc7, 0xc0, 0x89, 0x61, 0x72, 0xcf, 0xff, 0xff, 0xc3, 0x50, 0x0b, 0x45, 0x00, 0xde, 0x08, 0x41,
|
||||
0x08, 0x11, 0x89, 0x0c, 0xe0, 0x01, 0xa9, 0x0c, 0x89, 0x6c, 0x89, 0x03, 0x0b, 0x0d, 0x00, 0x03,
|
||||
0x89, 0x02, 0x08, 0x2d, 0x00, 0x9e, 0x89, 0x02, 0x08, 0x13, 0x00, 0x9e, 0x89, 0x02, 0xb8, 0xa2,
|
||||
0xa9, 0x02, 0x89, 0x01, 0xb8, 0x82, 0xf0, 0x03, 0x89, 0x01, 0xb8, 0xa2, 0xa9, 0x01, 0xd8, 0x50,
|
||||
0xaa, 0x0b, 0xd9, 0x00, 0xaa, 0x2a, 0xaa, 0x28, 0x0c, 0xca, 0x02, 0xe0, 0x82, 0x00, 0xd8, 0x00,
|
||||
0xf1, 0x7a, 0xff, 0xff, 0xca, 0xd0, 0xff, 0xff, 0xd6, 0x10
|
||||
};
|
||||
|
||||
static const uint16_t patch_0502[] = {
|
||||
0x72cf, 0xffff, 0xc7c0, 0x0827, 0x0040, 0xe1d1, 0xf40f, 0x8a01, 0x081b, 0x00df, 0x70cf, 0xffff,
|
||||
0xc644, 0x8808, 0xb8e4, 0x8a0e, 0x20cf, 0x0062, 0x20d0, 0x0061, 0xaa0e, 0x7fe0, 0xd800, 0x78e0,
|
||||
0xc0f1, 0x096e, 0x05c0, 0x75cf, 0xffff, 0xc7c0, 0x70cf, 0x0000, 0x5536, 0x7860, 0xc1a1, 0x95ca,
|
||||
0x77cf, 0xffff, 0xc8d4, 0x9f1c, 0x0827, 0x0012, 0xd908, 0x0d56, 0x0320, 0xda05, 0x9f3c, 0x0913,
|
||||
0x0f82, 0x0000, 0x0b00, 0xb82a, 0x7e0c, 0x762f, 0xf00f, 0x7e0c, 0x2941, 0x728e, 0xf00b, 0x7813,
|
||||
0xd908, 0x0d32, 0x0320, 0xda05, 0x7108, 0x0952, 0x05e0, 0x70c9, 0x7608, 0x8d0f, 0x0825, 0x001e,
|
||||
0x70cf, 0xffff, 0xc82f, 0x0d1e, 0x0400, 0x2805, 0x03be, 0x70cf, 0xffff, 0xc914, 0x9033, 0xb924,
|
||||
0x092a, 0x05e0, 0x702f, 0x7608, 0x8d0e, 0x0883, 0x005e, 0x8d01, 0x087b, 0x00de, 0x8d0e, 0x77cf,
|
||||
0xffff, 0xc84c, 0xb8a0, 0xad0e, 0x8f27, 0x8f49, 0x2202, 0x8040, 0x0008, 0x0003, 0x2102, 0x0080,
|
||||
0x780e, 0xc040, 0x8f08, 0x782c, 0x702f, 0xe063, 0x08fe, 0x05e0, 0xd964, 0x9720, 0x780d, 0xb9c1,
|
||||
0x2142, 0x8002, 0x22ca, 0x0062, 0xc300, 0x7259, 0x0817, 0x00e3, 0xd900, 0x70cf, 0xffff, 0xd8ba,
|
||||
0x8800, 0xe080, 0x22cc, 0x9022, 0xf202, 0xd901, 0x262f, 0xf047, 0xf208, 0x8d0e, 0xb880, 0xad0e,
|
||||
0xa5c4, 0x8d02, 0xb882, 0xad02, 0x70cf, 0xffff, 0xd8ba, 0xa840, 0xf002, 0xa5c4, 0x0079, 0x05e0,
|
||||
0xc0a1, 0x78e0, 0xc0f1, 0xc5e1, 0x75cf, 0xffff, 0xc7c0, 0xd900, 0xf009, 0x70cf, 0xffff, 0xd8bc,
|
||||
0x7835, 0x8041, 0x8000, 0xe102, 0xa040, 0x09f3, 0x8094, 0x70cf, 0xffff, 0xd748, 0x09de, 0x0300,
|
||||
0x218a, 0x0014, 0xb52a, 0x0051, 0x05c0, 0x0000, 0xffff, 0xcb54, 0xffff, 0xd778
|
||||
static const uint8_t patch_0502[] = {
|
||||
0xd7, 0x48, 0x72, 0xcf, 0xff, 0xff, 0xc7, 0xc0, 0x08, 0x27, 0x00, 0x40, 0xe1, 0xd1, 0xf4, 0x0f,
|
||||
0x8a, 0x01, 0x08, 0x1b, 0x00, 0xdf, 0x70, 0xcf, 0xff, 0xff, 0xc6, 0x44, 0x88, 0x08, 0xb8, 0xe4,
|
||||
0x8a, 0x0e, 0x20, 0xcf, 0x00, 0x62, 0x20, 0xd0, 0x00, 0x61, 0xaa, 0x0e, 0x7f, 0xe0, 0xd8, 0x00,
|
||||
0x78, 0xe0, 0xc0, 0xf1, 0x09, 0x6e, 0x05, 0xc0, 0x75, 0xcf, 0xff, 0xff, 0xc7, 0xc0, 0x70, 0xcf,
|
||||
0x00, 0x00, 0x55, 0x36, 0x78, 0x60, 0xc1, 0xa1, 0x95, 0xca, 0x77, 0xcf, 0xff, 0xff, 0xc8, 0xd4,
|
||||
0x9f, 0x1c, 0x08, 0x27, 0x00, 0x12, 0xd9, 0x08, 0x0d, 0x56, 0x03, 0x20, 0xda, 0x05, 0x9f, 0x3c,
|
||||
0x09, 0x13, 0x0f, 0x82, 0x00, 0x00, 0x0b, 0x00, 0xb8, 0x2a, 0x7e, 0x0c, 0x76, 0x2f, 0xf0, 0x0f,
|
||||
0x7e, 0x0c, 0x29, 0x41, 0x72, 0x8e, 0xf0, 0x0b, 0x78, 0x13, 0xd9, 0x08, 0x0d, 0x32, 0x03, 0x20,
|
||||
0xda, 0x05, 0x71, 0x08, 0x09, 0x52, 0x05, 0xe0, 0x70, 0xc9, 0x76, 0x08, 0x8d, 0x0f, 0x08, 0x25,
|
||||
0x00, 0x1e, 0x70, 0xcf, 0xff, 0xff, 0xc8, 0x2f, 0x0d, 0x1e, 0x04, 0x00, 0x28, 0x05, 0x03, 0xbe,
|
||||
0x70, 0xcf, 0xff, 0xff, 0xc9, 0x14, 0x90, 0x33, 0xb9, 0x24, 0x09, 0x2a, 0x05, 0xe0, 0x70, 0x2f,
|
||||
0x76, 0x08, 0x8d, 0x0e, 0x08, 0x83, 0x00, 0x5e, 0x8d, 0x01, 0x08, 0x7b, 0x00, 0xde, 0x8d, 0x0e,
|
||||
0x77, 0xcf, 0xff, 0xff, 0xc8, 0x4c, 0xb8, 0xa0, 0xad, 0x0e, 0x8f, 0x27, 0x8f, 0x49, 0x22, 0x02,
|
||||
0x80, 0x40, 0x00, 0x08, 0x00, 0x03, 0x21, 0x02, 0x00, 0x80, 0x78, 0x0e, 0xc0, 0x40, 0x8f, 0x08,
|
||||
0x78, 0x2c, 0x70, 0x2f, 0xe0, 0x63, 0x08, 0xfe, 0x05, 0xe0, 0xd9, 0x64, 0x97, 0x20, 0x78, 0x0d,
|
||||
0xb9, 0xc1, 0x21, 0x42, 0x80, 0x02, 0x22, 0xca, 0x00, 0x62, 0xc3, 0x00, 0x72, 0x59, 0x08, 0x17,
|
||||
0x00, 0xe3, 0xd9, 0x00, 0x70, 0xcf, 0xff, 0xff, 0xd8, 0xba, 0x88, 0x00, 0xe0, 0x80, 0x22, 0xcc,
|
||||
0x90, 0x22, 0xf2, 0x02, 0xd9, 0x01, 0x26, 0x2f, 0xf0, 0x47, 0xf2, 0x08, 0x8d, 0x0e, 0xb8, 0x80,
|
||||
0xad, 0x0e, 0xa5, 0xc4, 0x8d, 0x02, 0xb8, 0x82, 0xad, 0x02, 0x70, 0xcf, 0xff, 0xff, 0xd8, 0xba,
|
||||
0xa8, 0x40, 0xf0, 0x02, 0xa5, 0xc4, 0x00, 0x79, 0x05, 0xe0, 0xc0, 0xa1, 0x78, 0xe0, 0xc0, 0xf1,
|
||||
0xc5, 0xe1, 0x75, 0xcf, 0xff, 0xff, 0xc7, 0xc0, 0xd9, 0x00, 0xf0, 0x09, 0x70, 0xcf, 0xff, 0xff,
|
||||
0xd8, 0xbc, 0x78, 0x35, 0x80, 0x41, 0x80, 0x00, 0xe1, 0x02, 0xa0, 0x40, 0x09, 0xf3, 0x80, 0x94,
|
||||
0x70, 0xcf, 0xff, 0xff, 0xd7, 0x48, 0x09, 0xde, 0x03, 0x00, 0x21, 0x8a, 0x00, 0x14, 0xb5, 0x2a,
|
||||
0x00, 0x51, 0x05, 0xc0, 0x00, 0x00, 0xff, 0xff, 0xcb, 0x54, 0xff, 0xff, 0xd7, 0x78
|
||||
};
|
||||
|
||||
static const uint16_t awb_ccm[] = {
|
||||
0x0267, 0xFF1A, 0xFFB3, 0xFF80, 0x0166, 0x0003, 0xFF9A, 0xFEB4, 0x024D, 0x01BF, 0xFF01, 0xFFF3,
|
||||
0xFF75, 0x0198, 0xFFFD, 0xFF9A, 0xFEE7, 0x02A8, 0x01D9, 0xFF26, 0xFFF3, 0xFFB3, 0x0132, 0xFFE8,
|
||||
0xFFDA, 0xFECD, 0x02C2
|
||||
static const uint8_t awb_ccm[] = {
|
||||
0xc8, 0x92, 0x02, 0x67, 0xff, 0x1a, 0xff, 0xb3, 0xff, 0x80, 0x01, 0x66, 0x00, 0x03, 0xff, 0x9a,
|
||||
0xfe, 0xb4, 0x02, 0x4d, 0x01, 0xbf, 0xff, 0x01, 0xff, 0xf3, 0xff, 0x75, 0x01, 0x98, 0xff, 0xfd,
|
||||
0xff, 0x9a, 0xfe, 0xe7, 0x02, 0xa8, 0x01, 0xd9, 0xff, 0x26, 0xff, 0xf3, 0xff, 0xb3, 0x01, 0x32,
|
||||
0xff, 0xe8, 0xff, 0xda, 0xfe, 0xcd, 0x02, 0xc2
|
||||
};
|
||||
|
||||
static const uint16_t awb_weights[] = {
|
||||
0x0000, 0x0000, 0x0000, 0xE724, 0x1583, 0x2045, 0x03FF, 0x007C
|
||||
static const uint8_t awb_weights[] = {
|
||||
0xc8, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x24, 0x15, 0x83, 0x20, 0x45, 0x03, 0xff,
|
||||
0x00, 0x7c
|
||||
};
|
||||
|
||||
static const uint16_t cpipe_regs_8_bit_a[] = {
|
||||
0xC92A, // CAM_LL_START_SATURATION
|
||||
0xC92B, // CAM_LL_END_SATURATION
|
||||
@ -276,31 +319,15 @@ static int host_command(sensor_t *sensor, uint16_t command)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int load_array(sensor_t *sensor, uint16_t address, const uint16_t *array, size_t array_len)
|
||||
{
|
||||
uint16_t address_rev = __REV16(address);
|
||||
int ret = cambus_write_bytes(&sensor->bus, sensor->slv_addr,
|
||||
(uint8_t *) &address_rev, sizeof(uint16_t), CAMBUS_XFER_SUSPEND);
|
||||
|
||||
for (size_t i = 0; i < array_len; i++) {
|
||||
uint16_t reg_data = __REV16(array[i]);
|
||||
ret |= cambus_write_bytes(&sensor->bus, sensor->slv_addr,
|
||||
(uint8_t *) ®_data, sizeof(uint16_t),
|
||||
(i != (array_len - 1)) ? CAMBUS_XFER_SUSPEND : CAMBUS_XFER_NO_FLAGS);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int load_and_apply_patch(sensor_t *sensor, uint16_t patch_address, const uint16_t *patch, size_t patch_len,
|
||||
uint16_t patch_loader_address, uint16_t patch_id, uint32_t patch_firmware_id)
|
||||
static int load_patch(sensor_t *sensor, const uint8_t *patch, size_t patch_len,
|
||||
uint16_t patch_loader_address, uint16_t patch_id, uint32_t patch_firmware_id)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
// Patch address is stashed in the first two bytes.
|
||||
uint16_t patch_address = (((uint16_t) patch[0]) << 8) | patch[1];
|
||||
ret |= cambus_writew2(&sensor->bus, sensor->slv_addr, MT9M114_REG_XMDA_ACCESS_CTL_STAT, patch_address >> 15);
|
||||
ret |= cambus_writew2(&sensor->bus, sensor->slv_addr, MT9M114_REG_XMDA_PHYSICAL_ADDRESS_ACCESS, patch_address & 0x7FFF);
|
||||
ret |= load_array(sensor, patch_address, patch, patch_len);
|
||||
|
||||
ret |= cambus_write_bytes(&sensor->bus, sensor->slv_addr, (uint8_t *) patch, patch_len, CAMBUS_XFER_NO_FLAGS);
|
||||
ret |= cambus_writew2(&sensor->bus, sensor->slv_addr, MT9M114_REG_XMDA_LOGIC_ADDRESS_ACCESS, 0x0000);
|
||||
ret |= cambus_writew2(&sensor->bus, sensor->slv_addr, MT9M114_REG_PATCHLDR_LOADER_ADDRESS, patch_loader_address);
|
||||
ret |= cambus_writew2(&sensor->bus, sensor->slv_addr, MT9M114_REG_PATCHLDR_PATCH_ID, patch_id);
|
||||
@ -316,33 +343,9 @@ static int load_and_apply_patch(sensor_t *sensor, uint16_t patch_address, const
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int load_and_apply_patch_0202(sensor_t *sensor) // Black level correction fix
|
||||
{
|
||||
return load_and_apply_patch(sensor, 0xd000, patch_0202, sizeof(patch_0202) / sizeof(patch_0202[0]),
|
||||
0x010c, 0x0202, 0x41030202);
|
||||
}
|
||||
|
||||
static int load_and_apply_patch_0302(sensor_t *sensor) // Adaptive Sensitivity
|
||||
{
|
||||
return load_and_apply_patch(sensor, 0xd12c, patch_0302, sizeof(patch_0302) / sizeof(patch_0302[0]),
|
||||
0x04b4, 0x0302, 0x41030202);
|
||||
}
|
||||
|
||||
static int load_and_apply_patch_0402(sensor_t *sensor) // System Idle Control (auto wakeup from standby)
|
||||
{
|
||||
return load_and_apply_patch(sensor, 0xd530, patch_0402, sizeof(patch_0402) / sizeof(patch_0402[0]),
|
||||
0x0634, 0x0402, 0x41030202);
|
||||
}
|
||||
|
||||
static int load_and_apply_patch_0502(sensor_t *sensor) // Ambient light sensor
|
||||
{
|
||||
return load_and_apply_patch(sensor, 0xd748, patch_0502, sizeof(patch_0502) / sizeof(patch_0502[0]),
|
||||
0x0884, 0x0502, 0x41030202);
|
||||
}
|
||||
|
||||
static int load_awb_cmm(sensor_t *sensor)
|
||||
{
|
||||
return load_array(sensor, 0xC892, awb_ccm, sizeof(awb_ccm) / sizeof(awb_ccm[0]));
|
||||
return cambus_write_bytes(&sensor->bus, sensor->slv_addr, (uint8_t *) awb_ccm, sizeof(awb_ccm), CAMBUS_XFER_NO_FLAGS);
|
||||
}
|
||||
|
||||
static int load_awb(sensor_t *sensor)
|
||||
@ -351,10 +354,9 @@ static int load_awb(sensor_t *sensor)
|
||||
|
||||
ret |= cambus_writeb2(&sensor->bus, sensor->slv_addr, MT9M114_REG_CAM_AWB_XSCALE, 0x03);
|
||||
ret |= cambus_writeb2(&sensor->bus, sensor->slv_addr, MT9M114_REG_CAM_AWB_YSCALE, 0x02);
|
||||
|
||||
ret |= cambus_writew2(&sensor->bus, sensor->slv_addr, MT9M114_REG_CAM_AWB_Y_SHIFT_PRE_ADJ, 0x003C);
|
||||
|
||||
ret |= load_array(sensor, 0xC8F4, awb_weights, sizeof(awb_weights) / sizeof(awb_weights[0]));
|
||||
ret |= cambus_write_bytes(&sensor->bus, sensor->slv_addr,
|
||||
(uint8_t *) awb_weights, sizeof(awb_weights), CAMBUS_XFER_NO_FLAGS);
|
||||
|
||||
for (int i = 0xC90C; i <= 0xC911; i++) {
|
||||
ret |= cambus_writeb2(&sensor->bus, sensor->slv_addr, i, 0x80);
|
||||
@ -475,12 +477,16 @@ static int reset(sensor_t *sensor)
|
||||
ret |= cambus_writew2(&sensor->bus, sensor->slv_addr, default_regs[i][0], default_regs[i][1]);
|
||||
}
|
||||
|
||||
set_framesize(sensor, FRAMESIZE_SXGAM);
|
||||
ret |= set_framesize(sensor, FRAMESIZE_SXGAM);
|
||||
|
||||
ret |= load_and_apply_patch_0202(sensor);
|
||||
ret |= load_and_apply_patch_0302(sensor);
|
||||
ret |= load_and_apply_patch_0402(sensor);
|
||||
ret |= load_and_apply_patch_0502(sensor);
|
||||
// Black level correction fix
|
||||
ret |= load_patch(sensor, patch_0202, sizeof(patch_0202), 0x010c, 0x0202, 0x41030202);
|
||||
// Adaptive Sensitivity
|
||||
ret |= load_patch(sensor, patch_0302, sizeof(patch_0302), 0x04b4, 0x0302, 0x41030202);
|
||||
// System Idle Control (auto wakeup from standby)
|
||||
ret |= load_patch(sensor, patch_0402, sizeof(patch_0402), 0x0634, 0x0402, 0x41030202);
|
||||
// Ambient light sensor
|
||||
ret |= load_patch(sensor, patch_0502, sizeof(patch_0502), 0x0884, 0x0502, 0x41030202);
|
||||
|
||||
ret |= load_awb_cmm(sensor);
|
||||
ret |= load_awb(sensor);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user