Exemplo n.º 1
0
/* write one byte to ec rom */
int ec_write_byte(unsigned int addr, unsigned char byte)
{
	int ret = 0;

	/* enable spicmd writing. */
	ec_start_spi();

	/* enable write spi flash */
	wrec(REG_XBISPICMD, SPICMD_WRITE_ENABLE);
	if(rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY){
			printf("EC_WRITE_BYTE : SPICMD_WRITE_ENABLE failed.\n");
			ret = -1;
			goto out;
	}

	/* write the address */
	wrec(REG_XBISPIA2, (addr & 0xff0000) >> 16);
	wrec(REG_XBISPIA1, (addr & 0x00ff00) >> 8);
	wrec(REG_XBISPIA0, (addr & 0x0000ff) >> 0);
	wrec(REG_XBISPIDAT, byte);
	/* start action */
	wrec(REG_XBISPICMD, SPICMD_BYTE_PROGRAM);
	if(rom_instruction_cycle(SPICMD_BYTE_PROGRAM) == EC_STATE_BUSY){
			printf("EC_WRITE_BYTE : SPICMD_BYTE_PROGRAM failed.\n");
			ret = -1;
			goto out;
	}
	
out :
	/* disable spicmd writing. */
	ec_stop_spi();

	return ret;
}
Exemplo n.º 2
0
/* Starts to execute the protect SPI ROM function. */
int EC_ROM_start_protect(void)
{
	unsigned char status;
	int j;

	/* we should start spi access firstly */
	ec_start_spi();

	/* enable write spi flash */
	wrec(REG_XBISPICMD, SPICMD_WRITE_ENABLE);
	if(rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY){
			printf("EC_PROGRAM_ROM : SPICMD_WRITE_ENABLE failed.\n");
			goto out1;
	}
	
	/* protect the status register of rom */
	wrec(REG_XBISPICMD, SPICMD_READ_STATUS);
	if(rom_instruction_cycle(SPICMD_READ_STATUS) == EC_STATE_BUSY){
			printf("EC_PROGRAM_ROM : SPICMD_READ_STATUS failed.\n");
			goto out1;
	}
	status = rdec(REG_XBISPIDAT);

	wrec(REG_XBISPIDAT, status | 0x1C);
	if(ec_instruction_cycle() < 0){
			printf("EC_PROGRAM_ROM : write status value failed.\n");
			goto out1;
	}

	wrec(REG_XBISPICMD, SPICMD_WRITE_STATUS);
	if(rom_instruction_cycle(SPICMD_WRITE_STATUS) == EC_STATE_BUSY){
			printf("EC_PROGRAM_ROM : SPICMD_WRITE_STATUS failed.\n");
			goto out1;
	}

	/* disable the write action to spi rom */
	wrec(REG_XBISPICMD, SPICMD_WRITE_DISABLE);
	if(rom_instruction_cycle(SPICMD_WRITE_DISABLE) == EC_STATE_BUSY){
			printf("EC_PROGRAM_ROM : SPICMD_WRITE_DISABLE failed.\n");
			goto out1;
	}
	
out1:
	/* we should stop spi access firstly */
	ec_stop_spi();
out:
	/* for security */
	//for(j = 0; j < 2000; j++)
	//	udelay(1000);

	/* exit from the reset mode */
	//ec_exit_reset_mode();

	return 0;
}
Exemplo n.º 3
0
/* read one byte from xbi interface */
static int ec_read_byte(unsigned int addr, unsigned char *byte)
{
	int ret = 0;

	/* enable spicmd writing. */
	ec_start_spi();

	/* enable write spi flash */
	ec_write(REG_XBISPICMD, SPICMD_WRITE_ENABLE);
	if (rom_instruction_cycle(SPICMD_WRITE_ENABLE) == EC_STATE_BUSY) {
		printk(KERN_ERR "EC_READ_BYTE : SPICMD_WRITE_ENABLE failed.\n");
		ret = -EINVAL;
		goto out;
	}

	/* write the address */
	ec_write(REG_XBISPIA2, (addr & 0xff0000) >> 16);
	ec_write(REG_XBISPIA1, (addr & 0x00ff00) >> 8);
	ec_write(REG_XBISPIA0, (addr & 0x0000ff) >> 0);
	/* start action */
	ec_write(REG_XBISPICMD, SPICMD_HIGH_SPEED_READ);
	if (rom_instruction_cycle(SPICMD_HIGH_SPEED_READ) == EC_STATE_BUSY) {
		printk(KERN_ERR
		       "EC_READ_BYTE : SPICMD_HIGH_SPEED_READ failed.\n");
		ret = -EINVAL;
		goto out;
	}

	*byte = ec_read(REG_XBISPIDAT);

 out:
	/* disable spicmd writing. */
	ec_stop_spi();

	return ret;
}