diff options
Diffstat (limited to 'chip/mec1322/port80.c')
-rw-r--r-- | chip/mec1322/port80.c | 104 |
1 files changed, 0 insertions, 104 deletions
diff --git a/chip/mec1322/port80.c b/chip/mec1322/port80.c deleted file mode 100644 index df4583ed8b..0000000000 --- a/chip/mec1322/port80.c +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright 2015 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* Port 80 Timer Interrupt for MEC1322 */ - -#include "common.h" -#include "console.h" -#include "hooks.h" -#include "lpc.h" -#include "port80.h" -#include "registers.h" -#include "task.h" - -/* Fire timer interrupt every 1000 usec to check for port80 data. */ -#define POLL_PERIOD_USEC 1000 -/* After 30 seconds of no port 80 data, disable the timer interrupt. */ -#define INTERRUPT_DISABLE_TIMEOUT_SEC 30 -#define INTERRUPT_DISABLE_IDLE_COUNT (INTERRUPT_DISABLE_TIMEOUT_SEC \ - * 1000000 \ - / POLL_PERIOD_USEC) - -/* Count the number of consecutive interrupts with no port 80 data. */ -static int idle_count; - -static void port_80_interrupt_enable(void) -{ - idle_count = 0; - - /* Enable the interrupt. */ - task_enable_irq(MEC1322_IRQ_TIMER16_1); - /* Enable and start the timer. */ - MEC1322_TMR16_CTL(1) |= 1 | BIT(5); -} -DECLARE_HOOK(HOOK_CHIPSET_RESUME, port_80_interrupt_enable, HOOK_PRIO_DEFAULT); -DECLARE_HOOK(HOOK_CHIPSET_RESET, port_80_interrupt_enable, HOOK_PRIO_DEFAULT); - -static void port_80_interrupt_disable(void) -{ - /* Disable the timer block. */ - MEC1322_TMR16_CTL(1) &= ~1; - /* Disable the interrupt. */ - task_disable_irq(MEC1322_IRQ_TIMER16_1); -} -DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, port_80_interrupt_disable, - HOOK_PRIO_DEFAULT); - -/* - * The port 80 interrupt will use TIMER16 instance 1 for a 1ms countdown - * timer. This timer is on GIRQ23, bit 1. - */ -static void port_80_interrupt_init(void) -{ - uint32_t val = 0; - - /* - * The timers are driven by a 48MHz oscillator. Prescale down to - * 1MHz. 48MHz/48 -> 1MHz - */ - val = MEC1322_TMR16_CTL(1); - val = (val & 0xFFFF) | (47 << 16); - /* Automatically restart the timer. */ - val |= BIT(3); - /* The counter should decrement. */ - val &= ~BIT(2); - MEC1322_TMR16_CTL(1) = val; - - /* Set the reload value(us). */ - MEC1322_TMR16_PRE(1) = POLL_PERIOD_USEC; - - /* Clear the status if any. */ - MEC1322_TMR16_STS(1) |= 1; - - /* Clear any pending interrupt. */ - MEC1322_INT_SOURCE(23) = BIT(1); - /* Enable IRQ vector 23. */ - MEC1322_INT_BLK_EN |= BIT(23); - /* Enable the interrupt. */ - MEC1322_TMR16_IEN(1) |= 1; - MEC1322_INT_ENABLE(23) = BIT(1); - - port_80_interrupt_enable(); -} -DECLARE_HOOK(HOOK_INIT, port_80_interrupt_init, HOOK_PRIO_DEFAULT); - -void port_80_interrupt(void) -{ - int data; - - MEC1322_TMR16_STS(1) = 1; /* Ack the interrupt */ - if (BIT(1) & MEC1322_INT_RESULT(23)) { - data = port_80_read(); - - if (data != PORT_80_IGNORE) { - idle_count = 0; - port_80_write(data); - } - } - - if (++idle_count >= INTERRUPT_DISABLE_IDLE_COUNT) - port_80_interrupt_disable(); -} -DECLARE_IRQ(MEC1322_IRQ_TIMER16_1, port_80_interrupt, 2); |