mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-02 21:25:03 +00:00
Our code base contains a lot of debug messages in this pattern:
CPRINTF("[%T xxx]\n") or ccprintf("[%T xxx]\n")
The strings are taking up spaces in the EC binaries, so let's refactor
this by adding cprints() and ccprints().
cprints() is just like cprintf(), except that it adds the brackets
and the timestamp. ccprints() is equivalent to cprints(CC_CONSOLE, ...)
This saves us hundreds of bytes in EC binaries.
BUG=chromium:374575
TEST=Build and check flash size
BRANCH=None
Change-Id: Ifafe8dc1b80e698b28ed42b70518c7917b49ee51
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/200490
Reviewed-by: Randall Spangler <rspangler@chromium.org>
128 lines
2.5 KiB
C
128 lines
2.5 KiB
C
/* Copyright (c) 2013 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.
|
|
*/
|
|
|
|
/* Lid switch module for Chrome EC */
|
|
|
|
#include "common.h"
|
|
#include "console.h"
|
|
#include "gpio.h"
|
|
#include "hooks.h"
|
|
#include "host_command.h"
|
|
#include "lid_switch.h"
|
|
#include "timer.h"
|
|
#include "util.h"
|
|
|
|
/* Console output macros */
|
|
#define CPUTS(outstr) cputs(CC_SWITCH, outstr)
|
|
#define CPRINTS(format, args...) cprints(CC_SWITCH, format, ## args)
|
|
|
|
#define LID_DEBOUNCE_US (30 * MSEC) /* Debounce time for lid switch */
|
|
|
|
static int debounced_lid_open; /* Debounced lid state */
|
|
|
|
/**
|
|
* Get raw lid switch state.
|
|
*
|
|
* @return 1 if lid is open, 0 if closed.
|
|
*/
|
|
static int raw_lid_open(void)
|
|
{
|
|
return gpio_get_level(GPIO_LID_OPEN) ? 1 : 0;
|
|
}
|
|
|
|
/**
|
|
* Handle lid open.
|
|
*/
|
|
static void lid_switch_open(void)
|
|
{
|
|
if (debounced_lid_open) {
|
|
CPRINTS("lid already open");
|
|
return;
|
|
}
|
|
|
|
CPRINTS("lid open");
|
|
debounced_lid_open = 1;
|
|
hook_notify(HOOK_LID_CHANGE);
|
|
host_set_single_event(EC_HOST_EVENT_LID_OPEN);
|
|
}
|
|
|
|
/**
|
|
* Handle lid close.
|
|
*/
|
|
static void lid_switch_close(void)
|
|
{
|
|
if (!debounced_lid_open) {
|
|
CPRINTS("lid already closed");
|
|
return;
|
|
}
|
|
|
|
CPRINTS("lid close");
|
|
debounced_lid_open = 0;
|
|
hook_notify(HOOK_LID_CHANGE);
|
|
host_set_single_event(EC_HOST_EVENT_LID_CLOSED);
|
|
}
|
|
|
|
test_mockable int lid_is_open(void)
|
|
{
|
|
return debounced_lid_open;
|
|
}
|
|
|
|
/**
|
|
* Lid switch initialization code
|
|
*/
|
|
static void lid_init(void)
|
|
{
|
|
if (raw_lid_open())
|
|
debounced_lid_open = 1;
|
|
|
|
/* Enable interrupts, now that we've initialized */
|
|
gpio_enable_interrupt(GPIO_LID_OPEN);
|
|
}
|
|
DECLARE_HOOK(HOOK_INIT, lid_init, HOOK_PRIO_INIT_LID);
|
|
|
|
/**
|
|
* Handle debounced lid switch changing state.
|
|
*/
|
|
static void lid_change_deferred(void)
|
|
{
|
|
const int new_open = raw_lid_open();
|
|
|
|
/* If lid hasn't changed state, nothing to do */
|
|
if (new_open == debounced_lid_open)
|
|
return;
|
|
|
|
if (new_open)
|
|
lid_switch_open();
|
|
else
|
|
lid_switch_close();
|
|
}
|
|
DECLARE_DEFERRED(lid_change_deferred);
|
|
|
|
void lid_interrupt(enum gpio_signal signal)
|
|
{
|
|
/* Reset lid debounce time */
|
|
hook_call_deferred(lid_change_deferred, LID_DEBOUNCE_US);
|
|
}
|
|
|
|
static int command_lidopen(int argc, char **argv)
|
|
{
|
|
lid_switch_open();
|
|
return EC_SUCCESS;
|
|
}
|
|
DECLARE_CONSOLE_COMMAND(lidopen, command_lidopen,
|
|
NULL,
|
|
"Simulate lid open",
|
|
NULL);
|
|
|
|
static int command_lidclose(int argc, char **argv)
|
|
{
|
|
lid_switch_close();
|
|
return EC_SUCCESS;
|
|
}
|
|
DECLARE_CONSOLE_COMMAND(lidclose, command_lidclose,
|
|
NULL,
|
|
"Simulate lid close",
|
|
NULL);
|