Exemple #1
0
static int mb705_init_epld(void)
{
	const unsigned short test_value = 0x1234u;
	unsigned short epld_reg;
	unsigned short epld_version, board_version;

	/* write (anything) to the test register */
	epld_write(test_value, EPLD_TEST);
	/* verify we got back an inverted result */
	epld_reg = epld_read(EPLD_TEST);
	if (epld_reg != (test_value ^ 0xffffu)) {
		printf("Failed EPLD test (offset=%02x, result=%04x)\n",
			EPLD_TEST, epld_reg);
		return 1;
		}

	/* Assume we can trust the version register */
	epld_reg = epld_read(EPLD_IDENT);
	board_version = epld_reg >> 4 & 0xfu;
	epld_version = epld_reg & 0xfu;

	/* display the board revision, and EPLD version */
	printf("MB705: revision %c, EPLD version %02d\n",
		board_version + 'A' - 1,
		epld_version);

	/* return a "success" result */
	return 0;
}
void flashWriteEnable(void)
{
#if defined(CONFIG_SH_MB705)
	unsigned short epld_reg;

	/* Enable Vpp for writing to flash */
	epld_reg = epld_read(EPLD_MISC);
	epld_reg |= 1u << 3;	/* NandFlashWP = MISC[3] = 1 */
	epld_reg |= 1u << 2;	/* NorFlashVpp = MISC[2] = 1 */
	epld_write(epld_reg, EPLD_MISC);
#endif	/* CONFIG_SH_MB705 */
}
Exemple #3
0
void flashWriteDisable(void)
{
#if defined(CONFIG_ST40_MB705)
	unsigned short epld_reg;

	/* Disable Vpp for writing to flash */
	epld_reg = epld_read(EPLD_MISC);
	epld_reg &= ~(1u << 3);	/* NandFlashWP = MISC[3] = 0 */
	epld_reg &= ~(1u << 2);	/* NorFlashVpp = MISC[2] = 0 */
	epld_write(epld_reg, EPLD_MISC);
#endif	/* CONFIG_ST40_MB705 */
}
Exemple #4
0
static void mb628_led_set(struct led_classdev *led_cdev,
                          enum led_brightness brightness)
{
    u8 reg;

    /* Locking required here */
    reg = epld_read(EPLD_ENABLE);
    if (brightness)
        reg |= EPLD_ENABLE_HBEAT;
    else
        reg &= ~EPLD_ENABLE_HBEAT;
    epld_write(reg, EPLD_ENABLE);
}
static void __init mb618_init_irq(void)
{
	unsigned char epld_reg;
	const int test_offset = 4;
	const int version_offset = 0;
	int version;

	epld_early_init(&epld_device);

	epld_write(0, 0);	/* bank = Test */
	epld_write(0x63, test_offset);
	epld_reg = epld_read(test_offset);
	if (epld_reg != (unsigned char)(~0x63)) {
		printk(KERN_WARNING
		       "Failed mb618 EPLD test (off %02x, res %02x)\n",
		       test_offset, epld_reg);
		return;
	}

	version = epld_read(version_offset) & 0x1f;
	printk(KERN_INFO "mb618 EPLD version %02d\n", version);

	/*
	 * We have the nice new shiny interrupt system at last.
	 * For the moment just replicate the functionality to
	 * route the STEM interrupt through.
	 */

	/* Route STEM Int0 (EPLD int 4) to output 2 */
	epld_write(3, 0);	/* bank = IntPri1 */
	epld_reg = epld_read(4);
	epld_reg &= 0xfc;
	epld_reg |= 2;
	epld_write(epld_reg, 4);

	/* Enable it */
	epld_write(1<<4, 8);
}
extern int checkboard (void)
{
	unsigned version;

	printf ("\n\nBoard: STx7141-Mboard (MB628)"
#ifdef CONFIG_SH_SE_MODE
		"  [32-bit mode]"
#else
		"  [29-bit mode]"
#endif
		"\n");

	version = epld_read(EPLD_IDENT);
	printf("mb628 EPLD version %02d\n", version);
	return 0;
}
static void fpbutton_timer_callback(unsigned long data)
{
	struct platform_device *pdev = (struct platform_device *)data;
        struct input_dev *input = platform_get_drvdata(pdev);
	int mask = platform_get_irq_byname(pdev, "mask");
	u16 status = epld_read(EPLD_EMI_INT_STATUS);

	if (status & mask) {
		mod_timer(&fpbutton_timer,
			  jiffies + msecs_to_jiffies(SCAN_INTERVAL));
	} else {
		input_event(input, EV_KEY, BTN_0, 0);
		input_sync(input);

		enable_irq(platform_get_irq(pdev, 0));
	}
}
static void disable_harp_irq(unsigned int irq)
{
	unsigned maskReg;
	unsigned mask;
	int pri;

	if (irq < 0 || irq >= NUM_EXTERNAL_IRQS)
		return;

	pri = 15 - irq;

	if (pri < 8) {
		maskReg = EPLD_INTMASK0CLR;
	} else {
		maskReg = EPLD_INTMASK1CLR;
		pri -= 8;
	}
	mask = 1 << pri;

	epld_write(mask, maskReg);

	/* Read back the value we just wrote to flush any write posting */
	epld_read(maskReg);
}