Exemplo n.º 1
0
void
imxusb_ulpi_write(struct imxehci_softc *sc, int addr, uint8_t data)
{
	uint32_t reg;

	ulpi_wakeup(sc, TIMEOUT);

	reg = ULPI_RUN | ULPI_RW | __SHIFTIN(addr, ULPI_ADDR) | __SHIFTIN(data, ULPI_DATWR);
	bus_space_write_4(sc->sc_iot, sc->sc_ioh, IMXUSB_ULPIVIEW, reg);

	ulpi_wait(sc, TIMEOUT);

	return;
}
Exemplo n.º 2
0
uint8_t
imxusb_ulpi_read(struct imxehci_softc *sc, int addr)
{
	uint32_t data;

	ulpi_wakeup(sc, TIMEOUT);

	data = ULPI_RUN | __SHIFTIN(addr, ULPI_ADDR);
	bus_space_write_4(sc->sc_iot, sc->sc_ioh, IMXUSB_ULPIVIEW, data);

	data = ulpi_wait(sc, TIMEOUT);

	return __SHIFTOUT(data, ULPI_DATRD);
}
Exemplo n.º 3
0
/*
 * Wake the ULPI PHY up for communication
 *
 * returns 0 on success.
 */
static int ulpi_wakeup(struct ulpi_viewport *ulpi_vp)
{
	int err;

	if (readl(ulpi_vp->viewport_addr) & ULPI_SS)
		return 0; /* already awake */

	writel(ULPI_WU, ulpi_vp->viewport_addr);

	err = ulpi_wait(ulpi_vp, ULPI_WU);
	if (err)
		printf("ULPI wakeup timed out\n");

	return err;
}
Exemplo n.º 4
0
/*
 * Wake the ULPI PHY up for communication
 *
 * returns 0 on success.
 */
static int ulpi_wakeup(struct ulpi_viewport *ulpi_vp)
{
	int err;

	if (readl(ulpi_vp->viewport_addr) & OMAP_ULPI_ACCESS)
		return 0; /* already awake */

	writel(OMAP_ULPI_ACCESS, ulpi_vp->viewport_addr);

	err = ulpi_wait(ulpi_vp, OMAP_ULPI_ACCESS);
	if (err)
		debug("ULPI wakeup timed out\n");

	return err;
}
Exemplo n.º 5
0
/*
 * Issue a ULPI read/write request
 *
 * @value - the ULPI request
 */
static int ulpi_request(struct ulpi_viewport *ulpi_vp, u32 value)
{
	int err;

	err = ulpi_wakeup(ulpi_vp);
	if (err)
		return err;

	writel(value, ulpi_vp->viewport_addr);

	err = ulpi_wait(ulpi_vp, ULPI_RWRUN);
	if (err)
		printf("ULPI request timed out\n");

	return err;
}
Exemplo n.º 6
0
/*
 * Issue a ULPI read/write request
 */
static int ulpi_request(struct ulpi_viewport *ulpi_vp, u32 value)
{
	int err;

	err = ulpi_wakeup(ulpi_vp);
	if (err)
		return err;

	writel(value, ulpi_vp->viewport_addr);

	err = ulpi_wait(ulpi_vp, OMAP_ULPI_ACCESS);
	if (err)
		debug("ULPI request timed out\n");

	return err;
}
Exemplo n.º 7
0
static int
ulpi_scratch_test(struct imxehci_softc *sc)
{
	uint32_t ulpi_view;

	ulpi_view = ulpi_wakeup(sc, 1000);
	if (ulpi_view & ULPI_WU) {
		return -1;
	}

	bus_space_write_4(sc->sc_iot, sc->sc_ioh, IMXUSB_ULPIVIEW,
		(ULPI_RUN | ULPI_RW |
		 (ULPI_SCRATCH << ULPI_ADDR_SHIFT) | 0xAA));

	ulpi_view = ulpi_wait(sc, 1000);

	if (ulpi_view & ULPI_RUN) {
		return -1;
	}

	return 0;
}