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*/
}