static void r8a66597_enable_port(struct r8a66597 *r8a66597, int port) { u16 val; val = port ? DRPD : DCFM | DRPD; r8a66597_bset(r8a66597, val, get_syscfg_reg(port)); r8a66597_bset(r8a66597, HSE, get_syscfg_reg(port)); r8a66597_write(r8a66597, BURST | CPU_ADR_RD_WR, get_dmacfg_reg(port)); r8a66597_bclr(r8a66597, DTCHE, get_intenb_reg(port)); r8a66597_bset(r8a66597, ATTCHE, get_intenb_reg(port)); }
static int enable_controller(struct r8a66597 *r8a66597) { int ret, port; ret = r8a66597_clock_enable(r8a66597); if (ret < 0) return ret; #if !defined(CONFIG_RZA_USB) r8a66597_bset(r8a66597, CONFIG_R8A66597_LDRV & LDRV, PINCFG); #endif r8a66597_bset(r8a66597, USBE, SYSCFG0); r8a66597_bset(r8a66597, INTL, SOFCFG); r8a66597_write(r8a66597, 0, INTENB0); for (port = 0; port < R8A66597_MAX_ROOT_HUB; port++) r8a66597_write(r8a66597, 0, get_intenb_reg(port)); r8a66597_bset(r8a66597, CONFIG_R8A66597_ENDIAN & BIGEND, CFIFOSEL); r8a66597_bset(r8a66597, CONFIG_R8A66597_ENDIAN & BIGEND, D0FIFOSEL); r8a66597_bset(r8a66597, CONFIG_R8A66597_ENDIAN & BIGEND, D1FIFOSEL); r8a66597_bset(r8a66597, TRNENSEL, SOFCFG); for (port = 0; port < R8A66597_MAX_ROOT_HUB; port++) r8a66597_enable_port(r8a66597, port); return 0; }
static void r8a66597_disable_port(struct r8a66597 *r8a66597, int port) { u16 val, tmp; r8a66597_write(r8a66597, 0, get_intenb_reg(port)); r8a66597_write(r8a66597, 0, get_intsts_reg(port)); r8a66597_port_power(r8a66597, port, 0); do { tmp = r8a66597_read(r8a66597, SOFCFG) & EDGESTS; udelay(640); } while (tmp == EDGESTS); val = port ? DRPD : DCFM | DRPD; r8a66597_bclr(r8a66597, val, get_syscfg_reg(port)); r8a66597_bclr(r8a66597, HSE, get_syscfg_reg(port)); }