static int tifm_ms_set_param()

in host/tifm_ms.c [494:534]


static int tifm_ms_set_param(struct memstick_host *msh,
			     enum memstick_param param,
			     int value)
{
	struct tifm_ms *host = memstick_priv(msh);
	struct tifm_dev *sock = host->dev;

	switch (param) {
	case MEMSTICK_POWER:
		/* also affected by media detection mechanism */
		if (value == MEMSTICK_POWER_ON) {
			host->mode_mask = TIFM_MS_SYS_SRAC | TIFM_MS_SYS_REI;
			writel(TIFM_MS_SYS_RESET, sock->addr + SOCK_MS_SYSTEM);
			writel(TIFM_MS_SYS_FCLR | TIFM_MS_SYS_INTCLR,
			       sock->addr + SOCK_MS_SYSTEM);
			writel(0xffffffff, sock->addr + SOCK_MS_STATUS);
		} else if (value == MEMSTICK_POWER_OFF) {
			writel(TIFM_MS_SYS_FCLR | TIFM_MS_SYS_INTCLR,
			       sock->addr + SOCK_MS_SYSTEM);
			writel(0xffffffff, sock->addr + SOCK_MS_STATUS);
		} else
			return -EINVAL;
		break;
	case MEMSTICK_INTERFACE:
		if (value == MEMSTICK_SERIAL) {
			host->mode_mask = TIFM_MS_SYS_SRAC | TIFM_MS_SYS_REI;
			writel((~TIFM_CTRL_FAST_CLK)
			       & readl(sock->addr + SOCK_CONTROL),
			       sock->addr + SOCK_CONTROL);
		} else if (value == MEMSTICK_PAR4) {
			host->mode_mask = 0;
			writel(TIFM_CTRL_FAST_CLK
			       | readl(sock->addr + SOCK_CONTROL),
			       sock->addr + SOCK_CONTROL);
		} else
			return -EINVAL;
		break;
	}

	return 0;
}