unsigned __int64 __fastcall sub_5A28(unsigned int a1, __int64 a2, __int64 a3, char a4, int *a5) { unsigned int v5; // ebx unsigned __int64 v7; // rdi __int64 v9; // rsi _QWORD v10[5]; // [rsp+20h] [rbp-28h] BYREF int v11; // [rsp+68h] [rbp+20h] BYREF LOBYTE(v11) = a4; /*0x5a32*/ v5 = (unsigned __int16)a1; /*0x5a41*/ v7 = BYTE2(a1); /*0x5a4a*/ if ( !sub_5CFC(a1) ) { sub_5408( 0x80000000LL, "GPIO ERROR: Incorrect GpioPad define used on this chipset (Group=%d, Pad=%d)!\n", (unsigned int)v7, v5); return 0x8000000000000003uLL; /*0x5a77*/ } v9 = sub_5C64(v10); /*0x5a86*/ if ( v7 >= v10[0] ) { sub_5408(0x80000000LL, "GPIO ERROR: Group argument (%d) exceeds GPIO group range\n", (unsigned int)v7); return 0x8000000000000002uLL; /*0x5ab1*/ } if ( v5 >= *(_DWORD *)(v9 + 60 * v7 + 56) ) { sub_5408(0x80000000LL, "GPIO ERROR: Pin number (%d) exceeds possible range for this group\n", v5); return 0x8000000000000002uLL; /*0x5ac7*/ } sub_5B84(a1, &v11); /*0x5ad1*/ if ( v11 ) { sub_5408(0x80000000LL, "GPIO ERROR: Accessing pad not owned by host (Group=%d, Pad=%d)!\n", (unsigned int)v7, v5); return 0x8000000000000003uLL; /*0x5ae4*/ } *a5 = *(_DWORD *)((unsigned __int16)(*(_DWORD *)(v9 + 60 * v7 + 52) + 8 * v5) /*0x5b0f*/ | ((*(unsigned __int8 *)(v9 + 60 * v7) | 0xFD00LL) << 16)) & 2; return 0; /*0x5b1d*/ }