S32 pwrap_write( U32 adr, U32 wdata ) { return pwrap_wacs2( PWRAP_WRITE, adr,wdata,0 ); }
/* * pwrap_init_sidly - configure serial input delay * * This configures the serial input delay. We can configure 0, 2, 4 or 6ns * delay. Do a read test with all possible values and chose the best delay. */ static s32 pwrap_init_sidly(void) { u16 rdata; u32 i; u32 pass = 0; u32 sidly = 0; for (i = 0; i < 4; i++) { write32(&mtk_pwrap->sidly, i); pwrap_wacs2(0, DEW_READ_TEST, 0, &rdata, 0); if (rdata == DEFAULT_VALUE_READ_TEST) pass |= 1 << i; } /* * Config SIDLY according to results * Pass range should be continuously or return failed */ switch (pass) { /* only 1 pass, choose it */ case 1 << 0: sidly = 0; break; case 1 << 1: sidly = 1; break; case 1 << 2: sidly = 2; break; case 1 << 3: sidly = 3; break; /* two pass, choose the one on SIDLY boundary */ case (1 << 0) | (1 << 1): sidly = 0; break; case (1 << 1) | (1 << 2): /* no boundary, choose smaller one */ sidly = 1; break; case (1 << 2) | (1 << 3): sidly = 3; break; /* three pass, choose the middle one */ case (1 << 0) | (1 << 1) | (1 << 2): sidly = 1; break; case (1 << 1) | (1 << 2) | (1 << 3): sidly = 2; break; /* four pass, choose the smaller middle one */ case (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3): sidly = 1; break; /* pass range not continuous, should not happen */ default: die("sidly pass range not continuous\n"); } write32(&mtk_pwrap->sidly, sidly); return 0; }
S32 pwrap_read( U32 adr, U32 *rdata ) { return pwrap_wacs2( PWRAP_READ, adr,0,rdata ); }