Ejemplo n.º 1
0
static int mhl_chip_init(void)
{
	/* Read the chip rev ID */
	mhl_msm_state->chip_rev_id = mhl_i2c_reg_read(TX_PAGE_L0, 0x04);
	pr_debug("MHL: chip rev ID read=[%x]\n", mhl_msm_state->chip_rev_id);

	/* Reset the TX chip */
	mhl_sii_reset_pin(1);
	msleep(20);
	mhl_sii_reset_pin(0);
	msleep(20);
	mhl_sii_reset_pin(1);
	/* MHL spec requires a 100 ms wait here.  */
	msleep(100);

	/*
	 * Need to disable MHL discovery
	 */
	mhl_init_reg_settings(true);

	/*
	 * Power down the chip to the
	 * D3 - a low power standby mode
	 * cable impedance measurement logic is operational
	 */
	switch_mode(POWER_STATE_D3);
	return 0;
}
Ejemplo n.º 2
0
static int mhl_tx_chip_init(struct mhl_tx_ctrl *mhl_ctrl)
{
	uint8_t chip_rev_id = 0x00;
	struct i2c_client *client = mhl_ctrl->i2c_handle;

	/* Reset the TX chip */
	mhl_sii_reset_pin(mhl_ctrl, 0);
	msleep(20);
	mhl_sii_reset_pin(mhl_ctrl, 1);
	/* TX PR-guide requires a 100 ms wait here */
	msleep(100);

	/* Read the chip rev ID */
	chip_rev_id = MHL_SII_PAGE0_RD(0x04);
	pr_debug("MHL: chip rev ID read=[%x]\n", chip_rev_id);
	mhl_ctrl->chip_rev_id = chip_rev_id;

	/*
	 * Need to disable MHL discovery if
	 * MHL-USB handshake is implemented
	 */
	mhl_init_reg_settings(mhl_ctrl, true);
	switch_mode(mhl_ctrl, POWER_STATE_D3);
	return 0;
}
Ejemplo n.º 3
0
static int prepare_update(struct handler_priv *priv, 
			  struct img_type *img)
{
	int ret;
	char msg[128];
	int len;

	ret = switch_mode(priv->reset.gpiodev, priv->reset.offset,
			  priv->prog.gpiodev, priv->prog.offset, MODE_PROG);
	if (ret < 0) {
		return -ENODEV;
	}

	DEBUG("Using %s", img->device);

	priv->fduart = open(img->device, O_RDWR);

	if (priv->fduart < 0) {
		ERROR("Cannot open UART %s", img->device);
		return -ENODEV;
	}

	set_uart(priv->fduart);

	/* No FW data to be sent */
	priv->nbytes = 0;

	write_msg(priv->fduart, "$PROG;");

	len = receive_msg(priv->fduart, msg, sizeof(msg), priv->timeout, priv->debug);
	if (len < 0 || strcmp(msg, "$READY;"))
		return -EBADMSG;

	return 0;
}
Ejemplo n.º 4
0
/*
 * If hardware detected a change in impedance and raised an INTR
 * We check the range of this impedance to infer if the connected
 * device is MHL or USB and take appropriate actions.
 */
static int  mhl_msm_read_rgnd_int(void)
{
	uint8_t rgnd_imp;

	/*
	 * DISC STATUS REG 2
	 * 1:0 RGND
	 * 00  - open (USB)
	 * 01  - 2 kOHM (USB)
	 * 10  - 1 kOHM ***(MHL)**** It's range 800 - 1200 OHM from MHL spec
	 * 11  - short (USB)
	 */
	rgnd_imp = (mhl_i2c_reg_read(TX_PAGE_3, 0x001C) & (BIT1 | BIT0));
	pr_debug("Imp Range read = %02X\n", (int)rgnd_imp);

	if (0x02 == rgnd_imp) {
		pr_debug("MHL: MHL DEVICE!!!\n");
		mhl_i2c_reg_modify(TX_PAGE_3, 0x0018, BIT0, BIT0);
		/*
		 * Handling the MHL event in driver
		 */
		mhl_msm_state->mhl_mode = TRUE;
		if (notify_usb_online)
			notify_usb_online(1);
	} else {
		pr_debug("MHL: NON-MHL DEVICE!!!\n");
		mhl_msm_state->mhl_mode = FALSE;
		mhl_i2c_reg_modify(TX_PAGE_3, 0x0018, BIT3, BIT3);
		switch_mode(POWER_STATE_D3);
	}
	complete(&mhl_msm_state->rgnd_done);
	return mhl_msm_state->mhl_mode ?
		MHL_DISCOVERY_RESULT_MHL : MHL_DISCOVERY_RESULT_USB;
}
Ejemplo n.º 5
0
void cpu_exec(cpu_t *cpu, exec_reg_t *regs)
{
    int i;

    for(i = 0; i < regs->nreg; i++){
        if (regs->id[i] < N_GPREG){
            cpu->regs[regs->id[i]].data = regs->data[i];
        } else if (regs->id[i] == REGID_CPSR){
            switch_mode(cpu, regs->data[i] & 0x1f);
            cpu->cpsr.data = regs->data[i];
        } else if (regs->id[i] == REGID_SPSR ){ 
            cpu->spsr.data = regs->data[i];
        } else if(regs->id[i] & USER_REGS){
            uint8_t reg_id;
            reg_id = regs->id[i] & 0x0F; 
            if(reg_id == 13){
                cpu->banked_r13[0].data = regs->data[i];
            }else if (reg_id == 14){
                cpu->banked_r14[0].data = regs->data[i];
            } else if (reg_id >= 8 && (regs->id[i] & FIQ_MODE)){
                cpu->usr_regs[reg_id - 8].data = regs->data[i];
            } else {
                cpu->regs[reg_id].data = regs->data[i];
            }
//            ERROR("USER_REGS");
        }else{
            ERROR("Not recognized register");
        }
    } 
}
Ejemplo n.º 6
0
static int mhl_tx_chip_init(struct mhl_tx_ctrl *mhl_ctrl)
{
	uint8_t chip_rev_id = 0x00;
	struct i2c_client *client = mhl_ctrl->i2c_handle;
	unsigned long flags;


	spin_lock_irqsave(&mhl_ctrl->lock, flags);
	mhl_ctrl->dwnstream_hpd = 0;
	mhl_ctrl->tx_powered_off = false;
	spin_unlock_irqrestore(&mhl_ctrl->lock, flags);

	/* Reset the TX chip */
	mhl_sii_reset_pin(mhl_ctrl, 0);
	msleep(20);
	mhl_sii_reset_pin(mhl_ctrl, 1);
	/* TX PR-guide requires a 100 ms wait here */
	msleep(100);

	/* Read the chip rev ID */
	chip_rev_id = MHL_SII_PAGE0_RD(0x04);
	pr_debug("MHL: chip rev ID read=[%x]\n", chip_rev_id);
	mhl_ctrl->chip_rev_id = chip_rev_id;

	/*
	 * Need to disable MHL discovery if
	 * MHL-USB handshake is implemented
	 */
	mhl_init_reg_settings(mhl_ctrl, true);
	switch_mode(mhl_ctrl, POWER_STATE_D3, true);
	return 0;
}
Ejemplo n.º 7
0
static void
keycode_run()
{
    for (;;) {
        halt();

        key_t key;
        bool  avail;
        while ((avail = kb_getkey(&key)) != false) {
            if (key.ch) {
                tty_printf(
                    TTY_CONSOLE,
                    "Keycode: \033[%c]%02x\033[-] meta=%02x '%c'\n",
                    key.brk == KEYBRK_UP ? 'e' : '2',
                    key.code,
                    key.meta,
                    key.ch);
            }
            else {
                tty_printf(
                    TTY_CONSOLE,
                    "Keycode: \033[%c]%02x\033[-] meta=%02x\n",
                    key.brk == KEYBRK_UP ? 'e' : '2',
                    key.code,
                    key.meta);
            }
            if ((key.brk == KEYBRK_UP) && (key.meta & META_ALT) &&
                (key.code == KEY_TAB)) {
                switch_mode(&mode_command);
                return;
            }
        }
    }
}
Ejemplo n.º 8
0
int adau17x1_probe(struct device *dev, struct regmap *regmap,
	enum adau17x1_type type, void (*switch_mode)(struct device *dev),
	const char *firmware_name)
{
	struct adau *adau;

	if (IS_ERR(regmap))
		return PTR_ERR(regmap);

	adau = devm_kzalloc(dev, sizeof(*adau), GFP_KERNEL);
	if (!adau)
		return -ENOMEM;

	adau->regmap = regmap;
	adau->switch_mode = switch_mode;
	adau->type = type;

	dev_set_drvdata(dev, adau);

	if (firmware_name) {
		adau->sigmadsp = devm_sigmadsp_init_regmap(dev, regmap, NULL,
			firmware_name);
		if (IS_ERR(adau->sigmadsp)) {
			dev_warn(dev, "Could not find firmware file: %ld\n",
				PTR_ERR(adau->sigmadsp));
			adau->sigmadsp = NULL;
		}
	}

	if (switch_mode)
		switch_mode(dev);

	return 0;
}
Ejemplo n.º 9
0
static void mhl_msm_connection(struct mhl_tx_ctrl *mhl_ctrl)
{
	uint8_t val;
	struct i2c_client *client = mhl_ctrl->i2c_handle;

	pr_debug("%s: cur st [0x%x]\n", __func__,
		mhl_ctrl->cur_state);

	if (mhl_ctrl->cur_state == POWER_STATE_D0_MHL) {
		/* Already in D0 - MHL power state */
		pr_err("%s: cur st not D0\n", __func__);
		return;
	}
	/* spin_lock_irqsave(&mhl_state_lock, flags); */
	switch_mode(mhl_ctrl, POWER_STATE_D0_MHL);
	/* spin_unlock_irqrestore(&mhl_state_lock, flags); */

	MHL_SII_REG_NAME_WR(REG_MHLTX_CTL1, 0x10);
	MHL_SII_CBUS_WR(0x07, 0xF2);

	/*
	 * Keep the discovery enabled. Need RGND interrupt
	 * Possibly chip disables discovery after MHL_EST??
	 * Need to re-enable here
	 */
	val = MHL_SII_PAGE3_RD(0x10);
	MHL_SII_PAGE3_WR(0x10, val | BIT0);

	return;
}
Ejemplo n.º 10
0
int adau17x1_probe(struct device *dev, struct regmap *regmap,
	enum adau17x1_type type, void (*switch_mode)(struct device *dev),
	const char *firmware_name)
{
	struct adau *adau;
	int ret;

	if (IS_ERR(regmap))
		return PTR_ERR(regmap);

	adau = devm_kzalloc(dev, sizeof(*adau), GFP_KERNEL);
	if (!adau)
		return -ENOMEM;

	adau->mclk = devm_clk_get(dev, "mclk");
	if (IS_ERR(adau->mclk)) {
		if (PTR_ERR(adau->mclk) != -ENOENT)
			return PTR_ERR(adau->mclk);
		/* Clock is optional (for the driver) */
		adau->mclk = NULL;
	} else if (adau->mclk) {
		adau->clk_src = ADAU17X1_CLK_SRC_PLL_AUTO;

		/*
		 * Any valid PLL output rate will work at this point, use one
		 * that is likely to be chosen later as well. The register will
		 * be written when the PLL is powered up for the first time.
		 */
		ret = adau_calc_pll_cfg(clk_get_rate(adau->mclk), 48000 * 1024,
				adau->pll_regs);
		if (ret < 0)
			return ret;

		ret = clk_prepare_enable(adau->mclk);
		if (ret)
			return ret;
	}

	adau->regmap = regmap;
	adau->switch_mode = switch_mode;
	adau->type = type;

	dev_set_drvdata(dev, adau);

	if (firmware_name) {
		adau->sigmadsp = devm_sigmadsp_init_regmap(dev, regmap, NULL,
			firmware_name);
		if (IS_ERR(adau->sigmadsp)) {
			dev_warn(dev, "Could not find firmware file: %ld\n",
				PTR_ERR(adau->sigmadsp));
			adau->sigmadsp = NULL;
		}
	}

	if (switch_mode)
		switch_mode(dev);

	return 0;
}
Ejemplo n.º 11
0
static bool
cmd_switch_to_keycodes()
{
    tty_print(TTY_CONSOLE,
              "Entering keycode mode. Hit Alt-Tab to exit.\n");
    switch_mode(&mode_keycode);
    return false;
}
Ejemplo n.º 12
0
static void mhl_msm_disconnection(void)
{
	mhl_i2c_reg_write(TX_PAGE_3, 0x30, 0xD0);
	
	mhl_drive_hpd(HPD_DOWN);
	
	switch_mode(POWER_STATE_D3);
	return;
}
Ejemplo n.º 13
0
void GPO::run()
{
    gpo_config_t prev_config;
    db_gpo->get((int32_t *)&prev_config.i);
  
    bool state = !prev_config.s.period ?
      switch_mode(&prev_config) : blink_mode(&prev_config);
  
    hal->gpio->set(this->GPIOx, this->pin, state);
}
Ejemplo n.º 14
0
Archivo: main.c Proyecto: MarginC/kame
void
display(int signo)
{
	int j;
	sigset_t set;
	struct mode *p;

	sigemptyset(&set);
	sigaddset(&set, SIGALRM);
	sigprocmask(SIG_BLOCK, &set, NULL);

	/* Get the load average over the last minute. */
	(void)getloadavg(avenrun, sizeof(avenrun) / sizeof(avenrun[0]));
	(*curmode->c_fetch)();
	if (curmode->c_flags & CF_LOADAV) {
		j = 5.0*avenrun[0] + 0.5;
		dellave -= avenrun[0];
		if (dellave >= 0.0)
			c = '<';
		else {
			c = '>';
			dellave = -dellave;
		}
		if (dellave < 0.1)
			c = '|';
		dellave = avenrun[0];
		wmove(wload, 0, 0);
		wclrtoeol(wload);
		whline(wload, c, (j > 50) ? 50 : j);
		if (j > 50)
			wprintw(wload, " %4.1f", avenrun[0]);
	}
	(*curmode->c_refresh)();
	if (curmode->c_flags & CF_LOADAV)
		wrefresh(wload);
	wrefresh(wnd);
	move(CMDLINE, col);
	refresh();
	
	if (allflag && signo==SIGALRM) {
		if (allcounter >= turns){
			p = curmode;
			p++;
			if (p->c_name == NULL)
				p = modes;
			switch_mode(p);
			allcounter=0;
		} else
			allcounter++;
       }

	sigprocmask(SIG_UNBLOCK, &set, NULL);
	alarm(naptime);
}
Ejemplo n.º 15
0
static int finish_update(struct handler_priv *priv)
{
	int ret;

	close(priv->fduart);
	ret = switch_mode(priv->reset.gpiodev, priv->reset.offset,
			  priv->prog.gpiodev, priv->prog.offset, MODE_NORMAL);
	if (ret < 0) {
		return -ENODEV;
	}
	return 0;
}
Ejemplo n.º 16
0
static void mhl_msm_disconnection(struct mhl_tx_ctrl *mhl_ctrl)
{
	struct i2c_client *client = mhl_ctrl->i2c_handle;
	/*
	 * MHL TX CTL1
	 * Disabling Tx termination
	 */
	MHL_SII_PAGE3_WR(0x30, 0xD0);

	switch_mode(mhl_ctrl, POWER_STATE_D3);
	return;
}
static void run_basic_tests(struct userdata *u) {

    /* Subscribe to updates. Note that "alg_b" wants full updates. */
    meego_parameter_request_updates("alg_a", (pa_hook_cb_t)parameters_changed_cb, PA_HOOK_NORMAL, FALSE, &u->alg_a);
    meego_parameter_request_updates("alg_b", (pa_hook_cb_t)parameters_changed_cb, PA_HOOK_NORMAL, TRUE,  &u->alg_b);
    meego_parameter_request_updates("alg_c", (pa_hook_cb_t)parameters_changed_cb, PA_HOOK_NORMAL, FALSE, &u->alg_c);

    disable_algs(u);

    /* Shuffle the modes around a bit to verify correct parameters and status enums */
    switch_mode(u, "mode_a");
    verify(&u->alg_a, "mode_a", "set_a1_parameters", MEEGO_PARAM_UPDATE);
    verify(&u->alg_b, "mode_a", "set_b1_parameters", MEEGO_PARAM_UPDATE);

    switch_mode(u, "mode_b");
    verify(&u->alg_a, "mode_b", "set_a2_parameters", MEEGO_PARAM_UPDATE);
    verify(&u->alg_b, "mode_b", NULL, MEEGO_PARAM_MODE_CHANGE);

    switch_mode(u, "mode_c");
    verify(&u->alg_a, "mode_c", "set_a3_parameters", MEEGO_PARAM_UPDATE);
    verify(&u->alg_b, "mode_c", "set_b2_parameters", MEEGO_PARAM_UPDATE);

    switch_mode(u, "mode_d");
    verify(&u->alg_a, "mode_d", NULL, MEEGO_PARAM_DISABLE);
    verify(&u->alg_b, "mode_d", NULL, MEEGO_PARAM_DISABLE);
    verify(&u->alg_c, "mode_d", "set_c1_parameters", MEEGO_PARAM_UPDATE);

    switch_mode(u, "mode_c");
    verify(&u->alg_a, "mode_c", NULL, MEEGO_PARAM_ENABLE);
    verify(&u->alg_b, "mode_c", NULL, MEEGO_PARAM_ENABLE);
    verify(&u->alg_c, "mode_c", NULL, MEEGO_PARAM_DISABLE);

    disable_algs(u); /* -> mode_reset2 */

    /* Stop updates to verify that it's really working */
    meego_parameter_stop_updates("alg_a", (pa_hook_cb_t)parameters_changed_cb, &u->alg_a);
    meego_parameter_stop_updates("alg_b", (pa_hook_cb_t)parameters_changed_cb, &u->alg_b);
    meego_parameter_stop_updates("alg_c", (pa_hook_cb_t)parameters_changed_cb, &u->alg_c);

    /* This mode switch should now have no effect */
    switch_mode(u, "mode_a");
    verify(&u->alg_a, "mode_reset2", NULL, MEEGO_PARAM_DISABLE);
    verify(&u->alg_b, "mode_reset2", NULL, MEEGO_PARAM_DISABLE);
    verify(&u->alg_c, "mode_reset2", NULL, MEEGO_PARAM_DISABLE);

    /* This should cause updates to mode_a */
    meego_parameter_request_updates("alg_a", (pa_hook_cb_t)parameters_changed_cb, PA_HOOK_NORMAL, FALSE, &u->alg_a);
    meego_parameter_request_updates("alg_b", (pa_hook_cb_t)parameters_changed_cb, PA_HOOK_NORMAL, TRUE,  &u->alg_b);
    meego_parameter_request_updates("alg_c", (pa_hook_cb_t)parameters_changed_cb, PA_HOOK_NORMAL, FALSE, &u->alg_c);

    verify(&u->alg_a, "mode_a", "set_a1_parameters", MEEGO_PARAM_UPDATE);
    verify(&u->alg_b, "mode_a", "set_b1_parameters", MEEGO_PARAM_UPDATE);
    verify(&u->alg_c, "mode_a", NULL, MEEGO_PARAM_DISABLE);

    meego_parameter_stop_updates("alg_a", (pa_hook_cb_t)parameters_changed_cb, &u->alg_a);
    meego_parameter_stop_updates("alg_b", (pa_hook_cb_t)parameters_changed_cb, &u->alg_b);
    meego_parameter_stop_updates("alg_c", (pa_hook_cb_t)parameters_changed_cb, &u->alg_c);

    disable_algs(u);
}
Ejemplo n.º 18
0
static void mhl_msm_disconnection(struct mhl_tx_ctrl *mhl_ctrl)
{
	struct i2c_client *client = mhl_ctrl->i2c_handle;
	unsigned long flags;

	spin_lock_irqsave(&mhl_ctrl->lock, flags);
	mhl_ctrl->dwnstream_hpd &= ~BIT6;
	spin_unlock_irqrestore(&mhl_ctrl->lock, flags);

	/* disabling Tx termination */
	MHL_SII_REG_NAME_WR(REG_MHLTX_CTL1, 0xD0);
	switch_mode(mhl_ctrl, POWER_STATE_D3, true);
}
Ejemplo n.º 19
0
bool osg_ghost_switch_t::handle( const osgGA::GUIEventAdapter& event, osgGA::GUIActionAdapter& action)
{
    bool handled = false;

    if (event.getEventType() == osgGA::GUIEventAdapter::KEYDOWN
            && event.getKey() == 'g' )
    {
        switch_mode((scene_mode_t)(mode+1));
        handled = true;
    }

    return handled;
}
Ejemplo n.º 20
0
static void mhl_msm_disconnection(void)
{
	/*
	 * MHL TX CTL1
	 * Disabling Tx termination
	 */
	mhl_i2c_reg_write(TX_PAGE_3, 0x30, 0xD0);
	/* Change HPD line to drive it low */
	mhl_drive_hpd(HPD_DOWN);
	/* switch power state to D3 */
	switch_mode(POWER_STATE_D3);
	return;
}
Ejemplo n.º 21
0
void end_stats()
{
  time_marker now;
  while (now.diff_time(&stat_show_start)<2)
    now.get_time();

  view *f=player_list;
  for (;f;f=f->next)
    f->kills=0;

  fade_out(8);
  switch_mode(VMODE_320x200);
  pal->load();
  stat_man=old_stat;
}
Ejemplo n.º 22
0
void net_status_manager::push(char *name, visual_object *show)
{


  level++;
  first=new net_status_node(name,show,first);
  if (level==1)
  {
    screen->clear();
    update_dirty(screen);   // make sure the screen is actually clear before we mess with the palette

    // save a copy of the old palette
    if (pal)
      old_pal=pal->copy();
    else old_pal=0;
    bFILE *fp=open_file(g_file,"rb");
    if (fp->open_failure())
    {
      dprintf("Unable to open art/status.spe\n");
      exit(0);
    }

    old_xres=xres;
    switch_mode(VMODE_640x480);

    spec_directory sd(fp);
    spec_entry *se=sd.find(SPEC_PALETTE);  // find the palette used by this screen
    fp->seek(se->offset,0);
    palette new_pal(fp);
    new_pal.load();
    delete fp;

    // now load the status image direct into our back buffer so that
    // another image is not allocated
    int x,y;
    load_image_into_screen(g_file,"status",x,y);
    xp=x; yp=y;

    //    cash.img(cash.reg("art/status.spe","status", SPEC_IMAGE,1))->put_image(screen,0,0);
    //    xp=0;
    //    yp=0;

    update_dirty(screen);
  }


	
}
Ejemplo n.º 23
0
void net_status_manager::pop()
{
//	return;

  level--;
  if (level==0)
  {

    screen->clear();
    update_dirty(screen);

    if (old_xres<=320)
      switch_mode(VMODE_320x200);

    if (eh)
    {
      event e,*ev=new event;

      ev->type=EV_REDRAW;
      ev->redraw.x1=0;
      ev->redraw.y1=0;
      ev->redraw.x2=xres;
      ev->redraw.y2=yres;

      eh->push_event(ev);
      eh->get_event(e);   // cause the window manager to process this event
    }

    if (old_pal)
    {
      old_pal->load();
      delete old_pal;
    }

  }

  net_status_node *p=first; 
  first=first->next;
  delete p;

  if (level==0)
  {
  }
}
Ejemplo n.º 24
0
static int mhl_chip_init(void)
{
	
	mhl_msm_state->chip_rev_id = mhl_i2c_reg_read(TX_PAGE_L0, 0x04);
	pr_debug("MHL: chip rev ID read=[%x]\n", mhl_msm_state->chip_rev_id);

	
	mhl_sii_reset_pin(1);
	msleep(20);
	mhl_sii_reset_pin(0);
	msleep(20);
	mhl_sii_reset_pin(1);
	
	msleep(100);

	mhl_init_reg_settings(true);

	switch_mode(POWER_STATE_D3);
	return 0;
}
Ejemplo n.º 25
0
static void mhl_msm_connection(struct mhl_tx_ctrl *mhl_ctrl)
{
	uint8_t val;
	struct i2c_client *client = mhl_ctrl->i2c_handle;

	pr_debug("%s: cur st [0x%x]\n", __func__,
		mhl_ctrl->cur_state);

	if (mhl_ctrl->cur_state == POWER_STATE_D0_MHL) {
		/* Already in D0 - MHL power state */
		pr_err("%s: cur st not D0\n", __func__);
		return;
	}
	switch_mode(mhl_ctrl, POWER_STATE_D0_MHL, true);

	MHL_SII_REG_NAME_WR(REG_MHLTX_CTL1, 0x10);
	MHL_SII_CBUS_WR(0x07, 0xF2);

	/*
	 * Keep the discovery enabled. Need RGND interrupt
	 * Possibly chip disables discovery after MHL_EST??
	 * Need to re-enable here
	 */
	val = MHL_SII_PAGE3_RD(0x10);
	MHL_SII_PAGE3_WR(0x10, val | BIT0);

	/*
	 * indicate DCAP_RDY and DCAP_CHG
	 * to the peer only after
	 * msm conn has been established
	 */
	mhl_msc_send_write_stat(mhl_ctrl,
				MHL_STATUS_REG_CONNECTED_RDY,
				MHL_STATUS_DCAP_RDY);

	mhl_msc_send_set_int(mhl_ctrl,
			     MHL_RCHANGE_INT,
			     MHL_INT_DCAP_CHG,
			     MSC_PRIORITY_SEND);

}
Ejemplo n.º 26
0
ARM_DynCom::ARM_DynCom(PrivilegeMode initial_mode) {
    state = Common::make_unique<ARMul_State>();

    ARMul_NewState(state.get());
    ARMul_SelectProcessor(state.get(), ARM_v6_Prop | ARM_v5_Prop | ARM_v5e_Prop);

    state->abort_model = ABORT_BASE_RESTORED;

    state->bigendSig = LOW;
    state->lateabtSig = LOW;
    state->NirqSig = HIGH;

    // Reset the core to initial state
    ARMul_Reset(state.get());
    state->Emulate = RUN;

    // Switch to the desired privilege mode.
    switch_mode(state.get(), initial_mode);

    state->Reg[13] = 0x10000000; // Set stack pointer to the top of the stack
    state->Reg[15] = 0x00000000;
}
Ejemplo n.º 27
0
static int  mhl_msm_read_rgnd_int(struct mhl_tx_ctrl *mhl_ctrl)
{
	uint8_t rgnd_imp;
	struct i2c_client *client = mhl_ctrl->i2c_handle;
	struct msm_hdmi_mhl_ops *hdmi_mhl_ops = mhl_ctrl->hdmi_mhl_ops;
	unsigned long flags;
	int rc;

	spin_lock_irqsave(&mhl_ctrl->lock, flags);
	mhl_ctrl->tx_powered_off = false;
	spin_unlock_irqrestore(&mhl_ctrl->lock, flags);

	/* DISC STATUS REG 2 */
	rgnd_imp = (mhl_i2c_reg_read(client, TX_PAGE_3, 0x001C) &
		    (BIT1 | BIT0));
	pr_debug("imp range read=%02X\n", (int)rgnd_imp);

	if (0x02 == rgnd_imp) {
		pr_debug("%s: mhl sink\n", __func__);
		if (hdmi_mhl_ops) {
			rc = hdmi_mhl_ops->set_upstream_hpd(
				mhl_ctrl->pdata->hdmi_pdev, 1);
			pr_debug("%s: hdmi set hpd %s\n", __func__,
				 rc ? "failed" : "passed");
		}
		mhl_ctrl->mhl_mode = 1;
		power_supply_changed(&mhl_ctrl->mhl_psy);
		if (mhl_ctrl->notify_usb_online)
			mhl_ctrl->notify_usb_online(1);
	} else {
		pr_debug("%s: non-mhl sink\n", __func__);
		mhl_ctrl->mhl_mode = 0;
		switch_mode(mhl_ctrl, POWER_STATE_D3, true);
	}
	complete(&mhl_ctrl->rgnd_done);
	return mhl_ctrl->mhl_mode ?
		MHL_DISCOVERY_RESULT_MHL : MHL_DISCOVERY_RESULT_USB;
}
Ejemplo n.º 28
0
static int  mhl_msm_read_rgnd_int(void)
{
	uint8_t rgnd_imp;

	rgnd_imp = (mhl_i2c_reg_read(TX_PAGE_3, 0x001C) & (BIT1 | BIT0));
	pr_debug("Imp Range read = %02X\n", (int)rgnd_imp);

	if (0x02 == rgnd_imp) {
		pr_debug("MHL: MHL DEVICE!!!\n");
		mhl_i2c_reg_modify(TX_PAGE_3, 0x0018, BIT0, BIT0);
		mhl_msm_state->mhl_mode = TRUE;
		if (notify_usb_online)
			notify_usb_online(1);
	} else {
		pr_debug("MHL: NON-MHL DEVICE!!!\n");
		mhl_msm_state->mhl_mode = FALSE;
		mhl_i2c_reg_modify(TX_PAGE_3, 0x0018, BIT3, BIT3);
		switch_mode(POWER_STATE_D3);
	}
	complete(&mhl_msm_state->rgnd_done);
	return mhl_msm_state->mhl_mode ?
		MHL_DISCOVERY_RESULT_MHL : MHL_DISCOVERY_RESULT_USB;
}
Ejemplo n.º 29
0
static int  mhl_msm_read_rgnd_int(struct mhl_tx_ctrl *mhl_ctrl)
{
	uint8_t rgnd_imp;
	struct i2c_client *client = mhl_ctrl->i2c_handle;
	/* DISC STATUS REG 2 */
	rgnd_imp = (mhl_i2c_reg_read(client,
				     TX_PAGE_3, 0x001C) & (BIT1 | BIT0));
	pr_debug("imp range read=%02X\n", (int)rgnd_imp);

	if (0x02 == rgnd_imp) {
		pr_debug("%s: mhl sink\n", __func__);
		mhl_ctrl->mhl_mode = 1;
		power_supply_changed(&mhl_ctrl->mhl_psy);
		if (mhl_ctrl->notify_usb_online)
			mhl_ctrl->notify_usb_online(1);
	} else {
		pr_debug("%s: non-mhl sink\n", __func__);
		mhl_ctrl->mhl_mode = 0;
		switch_mode(mhl_ctrl, POWER_STATE_D3);
	}
	complete(&mhl_ctrl->rgnd_done);
	return mhl_ctrl->mhl_mode ?
		MHL_DISCOVERY_RESULT_MHL : MHL_DISCOVERY_RESULT_USB;
}
Ejemplo n.º 30
0
static void int_4_isr(void)
{
	uint8_t status, reg ;

	/* INTR_STATUS4 */
	status = mhl_i2c_reg_read(TX_PAGE_3, 0x0021);

	/*
	 * When I2C is inoperational (D3) and
	 * a previous interrupt brought us here,
	 * do nothing.
	 */
	if ((0x00 == status) && (mhl_msm_state->cur_state == POWER_STATE_D3)) {
		pr_debug("MHL: spurious interrupt\n");
		return;
	}
	if (0xFF != status) {
		if ((status & BIT0) && (mhl_msm_state->chip_rev_id < 1)) {
			uint8_t tmds_cstat;
			uint8_t mhl_fifo_status;

			/* TMDS CSTAT */
			tmds_cstat = mhl_i2c_reg_read(TX_PAGE_3, 0x0040);

			pr_debug("TMDS CSTAT: 0x%02x\n", tmds_cstat);

			if (tmds_cstat & 0x02) {
				mhl_fifo_status = mhl_i2c_reg_read(TX_PAGE_3,
					0x0023);
				pr_debug("MHL FIFO status: 0x%02x\n",
					mhl_fifo_status);
				if (mhl_fifo_status & 0x0C) {
					mhl_i2c_reg_write(TX_PAGE_3, 0x0023,
						0x0C);

					pr_debug("Apply MHL FIFO Reset\n");
					mhl_i2c_reg_write(TX_PAGE_3, 0x0000,
						0x94);
					mhl_i2c_reg_write(TX_PAGE_3, 0x0000,
						0x84);
				}
			}
		}

		if (status & BIT1)
			pr_debug("MHL: INT4 BIT1 is set\n");

		/* MHL_EST interrupt */
		if (status & BIT2) {
			pr_debug("mhl_msm_connection() from ISR\n");
			mhl_connect_api(true);
			mhl_msm_connection();
			pr_debug("MHL Connect  Drv: INT4 Status = %02X\n",
				(int) status);
		} else if (status & BIT3) {
			pr_debug("MHL: uUSB-A type device detected.\n");
			mhl_i2c_reg_write(TX_PAGE_3, 0x001C, 0x80);
			switch_mode(POWER_STATE_D3);
		}

		if (status & BIT5) {
			mhl_connect_api(false);
			/* Clear interrupts - REG INTR4 */
			reg = mhl_i2c_reg_read(TX_PAGE_3, 0x0021);
			mhl_i2c_reg_write(TX_PAGE_3, 0x0021, reg);
			mhl_msm_disconnection();
			if (notify_usb_online)
				notify_usb_online(0);
			pr_debug("MHL Disconnect Drv: INT4 Status = %02X\n",
				(int)status);
		}

		if ((mhl_msm_state->cur_state != POWER_STATE_D0_MHL) &&\
			(status & BIT6)) {
			/* RGND READY Intr */
			switch_mode(POWER_STATE_D0_MHL);
			mhl_msm_read_rgnd_int();
		}

		/* Can't succeed at these in D3 */
		if (mhl_msm_state->cur_state != POWER_STATE_D3) {
			/* CBUS Lockout interrupt? */
			/*
			 * Hardware detection mechanism figures that
			 * CBUS line is latched and raises this intr
			 * where we force usb switch open and release
			 */
			if (status & BIT4) {
				force_usb_switch_open();
				release_usb_switch_open();
			}
		}
	}
	pr_debug("MHL END  Drv: INT4 Status = %02X\n", (int) status);
	mhl_i2c_reg_write(TX_PAGE_3, 0x0021, status);

	return;
}