summaryrefslogtreecommitdiffstats
path: root/firmware/target/arm/philips/hdd1630
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/philips/hdd1630')
-rw-r--r--firmware/target/arm/philips/hdd1630/adc-target.h39
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/backlight-hdd1630.c49
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/backlight-target.h36
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/button-hdd1630.c65
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/button-target.h53
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/lcd-hdd1630.c266
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/power-hdd1630.c58
-rw-r--r--firmware/target/arm/philips/hdd1630/powermgmt-hdd1630.c62
8 files changed, 628 insertions, 0 deletions
diff --git a/firmware/target/arm/philips/hdd1630/adc-target.h b/firmware/target/arm/philips/hdd1630/adc-target.h
new file mode 100644
index 0000000000..95b911783b
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/adc-target.h
@@ -0,0 +1,39 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Barry Wardell
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#ifndef _ADC_TARGET_H_
+#define _ADC_TARGET_H_
+
+#define ADC_ADDR (*(volatile unsigned long*)(0x7000ad00))
+#define ADC_STATUS (*(volatile unsigned long*)(0x7000ad04))
+#define ADC_DATA_1 (*(volatile unsigned long*)(0x7000ad20))
+#define ADC_DATA_2 (*(volatile unsigned long*)(0x7000ad24))
+#define ADC_INIT (*(volatile unsigned long*)(0x7000ad2c))
+
+#define NUM_ADC_CHANNELS 4
+
+#define ADC_BATTERY 0
+#define ADC_UNKNOWN_1 1
+#define ADC_UNKNOWN_2 2
+#define ADC_UNKNOWN_3 3
+#define ADC_UNREG_POWER ADC_BATTERY /* For compatibility */
+
+/* Force a scan now */
+unsigned short adc_scan(int channel);
+
+#endif
diff --git a/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c b/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c
new file mode 100755
index 0000000000..22d31976aa
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c
@@ -0,0 +1,49 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 by Mark Arigo
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include "config.h"
+#include "backlight-target.h"
+#include "system.h"
+#include "lcd.h"
+#include "backlight.h"
+
+#ifdef HAVE_BACKLIGHT_BRIGHTNESS
+static unsigned short backlight_brightness = DEFAULT_BRIGHTNESS_SETTING;
+
+void _backlight_set_brightness(int brightness)
+{
+}
+#endif
+
+void _backlight_on(void)
+{
+}
+
+void _backlight_off(void)
+{
+}
+
+#ifdef HAVE_BUTTON_LIGHT
+void _buttonlight_on(void)
+{
+}
+
+void _buttonlight_off(void)
+{
+}
+#endif
diff --git a/firmware/target/arm/philips/hdd1630/backlight-target.h b/firmware/target/arm/philips/hdd1630/backlight-target.h
new file mode 100755
index 0000000000..3cfd085761
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/backlight-target.h
@@ -0,0 +1,36 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 by Mark Arigo
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#ifndef BACKLIGHT_TARGET_H
+#define BACKLIGHT_TARGET_H
+
+#define _backlight_init() true
+void _backlight_on(void);
+void _backlight_off(void);
+int __backlight_is_on(void);
+
+#ifdef HAVE_BACKLIGHT_BRIGHTNESS
+void _backlight_set_brightness(int brightness);
+#endif
+
+#ifdef HAVE_BUTTON_LIGHT
+void _buttonlight_on(void);
+void _buttonlight_off(void);
+#endif
+
+#endif
diff --git a/firmware/target/arm/philips/hdd1630/button-hdd1630.c b/firmware/target/arm/philips/hdd1630/button-hdd1630.c
new file mode 100755
index 0000000000..ac478065bc
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/button-hdd1630.c
@@ -0,0 +1,65 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 by Mark Arigo
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "system.h"
+#include "button.h"
+#include "backlight.h"
+
+void button_init_device(void)
+{
+ /* TODO...for now, hardware initialisation is done by the bootloader */
+}
+
+bool button_hold(void)
+{
+ return !(GPIOJ_INPUT_VAL & 0x8);
+}
+
+/*
+ * Get button pressed from hardware
+ */
+int button_read_device(void)
+{
+ int btn = BUTTON_NONE;
+ static bool hold_button = false;
+ bool hold_button_old;
+
+ /* Hold */
+ hold_button_old = hold_button;
+ hold_button = button_hold();
+
+ /* device buttons */
+ if (!hold_button)
+ {
+ if (!(GPIOA_INPUT_VAL & 0x01)) btn |= BUTTON_MENU;
+ if (!(GPIOA_INPUT_VAL & 0x02)) btn |= BUTTON_VOL_UP;
+ if (!(GPIOA_INPUT_VAL & 0x04)) btn |= BUTTON_VOL_DOWN;
+ if (!(GPIOA_INPUT_VAL & 0x08)) btn |= BUTTON_VIEW;
+
+ if (!(GPIOD_INPUT_VAL & 0x20)) btn |= BUTTON_PLAYLIST;
+ if (!(GPIOD_INPUT_VAL & 0x40)) btn |= BUTTON_POWER;
+ }
+
+ return btn;
+}
+
+bool headphones_inserted(void)
+{
+ return true;
+}
diff --git a/firmware/target/arm/philips/hdd1630/button-target.h b/firmware/target/arm/philips/hdd1630/button-target.h
new file mode 100755
index 0000000000..92c584463f
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/button-target.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 by Mark Arigo
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#ifndef _BUTTON_TARGET_H_
+#define _BUTTON_TARGET_H_
+
+#include <stdbool.h>
+#include "config.h"
+
+#define HAS_BUTTON_HOLD
+
+bool button_hold(void);
+void button_init_device(void);
+int button_read_device(void);
+
+/* Main unit's buttons */
+#define BUTTON_POWER 0x00000001
+#define BUTTON_PLAYLIST 0x00000002
+#define BUTTON_MENU 0x00000004
+#define BUTTON_VIEW 0x00000008
+#define BUTTON_VOL_UP 0x00000010
+#define BUTTON_VOL_DOWN 0x00000020
+#define BUTTON_SELECT 0x00000040
+#define BUTTON_LEFT 0x00000080
+#define BUTTON_RIGHT 0x00000100
+#define BUTTON_UP 0x00000200
+#define BUTTON_DOWN 0x00000400
+
+#define BUTTON_MAIN 0x00000fff
+
+/* No Remote control */
+#define BUTTON_REMOTE 0
+
+#define POWEROFF_BUTTON BUTTON_POWER
+#define POWEROFF_COUNT 10
+
+#endif /* _BUTTON_TARGET_H_ */
diff --git a/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c b/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c
new file mode 100755
index 0000000000..5e6d3ace42
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c
@@ -0,0 +1,266 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 by Mark Arigo
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include "config.h"
+#include "cpu.h"
+#include "lcd.h"
+#include "kernel.h"
+#include "system.h"
+
+/* Display status */
+static unsigned lcd_yuv_options SHAREDBSS_ATTR = 0;
+
+/* wait for LCD */
+static inline void lcd_wait_write(void)
+{
+ int i = 0;
+ while (LCD2_PORT & LCD2_BUSY_MASK)
+ {
+ if (i < 2000)
+ i++;
+ else
+ LCD2_PORT &= ~LCD2_BUSY_MASK;
+ }
+}
+
+/* send LCD data */
+static void lcd_send_data(unsigned data)
+{
+ lcd_wait_write();
+ LCD2_PORT = LCD2_DATA_MASK | (data & 0xff);
+}
+
+/* send LCD command */
+static void lcd_send_cmd(unsigned cmd)
+{
+ lcd_wait_write();
+ LCD2_PORT = LCD2_CMD_MASK | (cmd & 0xff);
+ lcd_wait_write();
+}
+
+static inline void lcd_send_pixel(unsigned pixel)
+{
+ lcd_send_data(pixel >> 8);
+ lcd_send_data(pixel);
+}
+
+void lcd_init_device(void)
+{
+#if 0
+ /* this sequence from the OF bootloader */
+
+ DEV_EN2 |= 0x2000;
+ outl(inl(0x70000014) & ~0xf000000, 0x70000014);
+ outl(inl(0x70000014) | 0xa000000, 0x70000014);
+ DEV_INIT1 &= 0xc000;
+ DEV_INIT1 |= 0x8000;
+ MLCD_SCLK_DIV &= ~0x800;
+ CLCD_CLOCK_SRC |= 0xc0000000;
+ DEV_INIT2 &= ~0x400;
+ outl(inl(0x7000002c) | ((1<<4)<<24), 0x7000002c);
+ DEV_INIT2 &= ~((1<<4)<<24);
+ udelay(10000);
+
+ DEV_INIT2 |= ((1<<4)<<24);
+ outl(0x220, 0x70008a00);
+ outl(0x1f00, 0x70008a04);
+ LCD2_BLOCK_CTRL = 0x10008080;
+ LCD2_BLOCK_CONFIG = 0xF00000;
+
+ GPIOJ_ENABLE |= 0x4;
+ GPIOJ_OUTPUT_VAL |= 0x4;
+ GPIOJ_OUTPUT_EN |= 0x4;
+
+ lcd_send_cmd(0x1);
+ udelay(10000);
+
+ lcd_send_cmd(0x25);
+ lcd_send_data(0x3f);
+
+ lcd_send_cmd(0x11);
+ udelay(120000);
+
+ lcd_send_cmd(0x20);
+ lcd_send_cmd(0x38);
+ lcd_send_cmd(0x13);
+
+ lcd_send_cmd(0xb4);
+ lcd_send_data(0x2);
+ lcd_send_data(0x6);
+ lcd_send_data(0x8);
+ lcd_send_data(0xd);
+
+ lcd_send_cmd(0xb5);
+ lcd_send_data(0x2);
+ lcd_send_data(0x6);
+ lcd_send_data(0x8);
+ lcd_send_data(0xd);
+
+ lcd_send_cmd(0xb6);
+ lcd_send_data(0x19);
+ lcd_send_data(0x23);
+ lcd_send_data(0x2d);
+
+ lcd_send_cmd(0xb7);
+ lcd_send_data(0x5);
+
+ lcd_send_cmd(0xba);
+ lcd_send_data(0x7);
+ lcd_send_data(0x18);
+
+ lcd_send_cmd(0x36);
+ lcd_send_data(0);
+
+ lcd_send_cmd(0x3a);
+ lcd_send_data(0x5);
+
+ lcd_send_cmd(0x2d);
+ lcd_send_data(0x1);
+ lcd_send_data(0x2);
+ lcd_send_data(0x3);
+ lcd_send_data(0x4);
+ lcd_send_data(0x5);
+ lcd_send_data(0x6);
+ lcd_send_data(0x7);
+ lcd_send_data(0x8);
+ lcd_send_data(0x9);
+ lcd_send_data(0xa);
+ lcd_send_data(0xb);
+ lcd_send_data(0xc);
+ lcd_send_data(0xd);
+ lcd_send_data(0xe);
+ lcd_send_data(0xf);
+ lcd_send_data(0x10);
+ lcd_send_data(0x11);
+ lcd_send_data(0x12);
+ lcd_send_data(0x13);
+ lcd_send_data(0x14);
+ lcd_send_data(0x15);
+ lcd_send_data(0x16);
+ lcd_send_data(0x17);
+ lcd_send_data(0x18);
+ lcd_send_data(0x19);
+ lcd_send_data(0x1a);
+ lcd_send_data(0x1b);
+ lcd_send_data(0x1c);
+ lcd_send_data(0x1d);
+ lcd_send_data(0x1e);
+ lcd_send_data(0x1f);
+ lcd_send_data(0x20);
+ lcd_send_data(0x21);
+ lcd_send_data(0x22);
+ lcd_send_data(0x23);
+ lcd_send_data(0x24);
+ lcd_send_data(0x25);
+ lcd_send_data(0x26);
+ lcd_send_data(0x27);
+ lcd_send_data(0x28);
+ lcd_send_data(0x29);
+ lcd_send_data(0x2a);
+ lcd_send_data(0x2b);
+ lcd_send_data(0x2c);
+ lcd_send_data(0x2d);
+ lcd_send_data(0x2e);
+ lcd_send_data(0x2f);
+ lcd_send_data(0x30);
+
+ lcd_send_cmd(0x29);
+#endif
+}
+
+/*** hardware configuration ***/
+int lcd_default_contrast(void)
+{
+ return DEFAULT_CONTRAST_SETTING;
+}
+
+void lcd_set_contrast(int val)
+{
+ (void)val;
+}
+
+void lcd_set_invert_display(bool yesno)
+{
+ (void)yesno;
+}
+
+/* turn the display upside down (call lcd_update() afterwards) */
+void lcd_set_flip(bool yesno)
+{
+ (void)yesno;
+}
+
+void lcd_yuv_set_options(unsigned options)
+{
+ lcd_yuv_options = options;
+}
+
+/* Performance function to blit a YUV bitmap directly to the LCD */
+void lcd_blit_yuv(unsigned char * const src[3],
+ int src_x, int src_y, int stride,
+ int x, int y, int width, int height)
+{
+ (void)src;
+ (void)src_x;
+ (void)src_y;
+ (void)stride;
+ (void)x;
+ (void)y;
+ (void)width;
+ (void)height;
+}
+
+/* Update the display.
+ This must be called after all other LCD functions that change the display. */
+void lcd_update(void)
+{
+ lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT);
+}
+
+/* Update a fraction of the display. */
+void lcd_update_rect(int x, int y, int width, int height)
+{
+ const fb_data *addr;
+
+ if (x + width >= LCD_WIDTH)
+ width = LCD_WIDTH - x;
+ if (y + height >= LCD_HEIGHT)
+ height = LCD_HEIGHT - y;
+
+ if ((width <= 0) || (height <= 0))
+ return; /* Nothing left to do. */
+
+ addr = &lcd_framebuffer[y][x];
+
+ lcd_send_cmd(0x2a);
+ lcd_send_data(x);
+ lcd_send_data(x + width - 1);
+
+ lcd_send_cmd(0x2b);
+ lcd_send_data(y);
+ lcd_send_data(y + height - 1);
+
+ lcd_send_cmd(0x2c);
+ do {
+ int w = width;
+ do {
+ lcd_send_pixel(*addr++);
+ } while (--w > 0);
+ addr += LCD_WIDTH - width;
+ } while (--height > 0);
+}
diff --git a/firmware/target/arm/philips/hdd1630/power-hdd1630.c b/firmware/target/arm/philips/hdd1630/power-hdd1630.c
new file mode 100755
index 0000000000..6d3686ff4a
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/power-hdd1630.c
@@ -0,0 +1,58 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 by Mark Arigo
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "config.h"
+#include "cpu.h"
+#include <stdbool.h>
+#include "adc.h"
+#include "kernel.h"
+#include "system.h"
+#include "power.h"
+#include "logf.h"
+#include "usb.h"
+
+#if CONFIG_CHARGING == CHARGING_CONTROL
+bool charger_enabled;
+#endif
+
+void power_init(void)
+{
+}
+
+bool charger_inserted(void)
+{
+ return false ;
+}
+
+void ide_power_enable(bool on)
+{
+ (void)on;
+ /* We do nothing */
+}
+
+
+bool ide_powered(void)
+{
+ /* pretend we are always powered - we don't turn it off */
+ return true;
+}
+
+void power_off(void)
+{
+}
diff --git a/firmware/target/arm/philips/hdd1630/powermgmt-hdd1630.c b/firmware/target/arm/philips/hdd1630/powermgmt-hdd1630.c
new file mode 100644
index 0000000000..71781182fa
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/powermgmt-hdd1630.c
@@ -0,0 +1,62 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Heikki Hannikainen, Uwe Freese
+ * Revisions copyright (C) 2005 by Gerald Van Baren
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "config.h"
+#include "adc.h"
+#include "powermgmt.h"
+
+const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] =
+{
+ 3450
+};
+
+const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] =
+{
+ 3400
+};
+
+/* voltages (millivolt) of 0%, 10%, ... 100% when charging disabled */
+const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] =
+{
+ { 3480, 3550, 3590, 3610, 3630, 3650, 3700, 3760, 3800, 3910, 3990 },
+};
+
+#if CONFIG_CHARGING
+/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */
+const unsigned short percent_to_volt_charge[11] =
+{
+ 3480, 3550, 3590, 3610, 3630, 3650, 3700, 3760, 3800, 3910, 3990
+};
+#endif /* CONFIG_CHARGING */
+
+#define BATTERY_SCALE_FACTOR 6003
+/* full-scale ADC readout (2^10) in millivolt */
+
+/* adc readout
+ * max with charger connected: 690
+ * max fully charged: 682
+ * min just before shutdown: 570
+ */
+
+/* Returns battery voltage from ADC [millivolts] */
+unsigned int battery_adc_voltage(void)
+{
+ return (adc_read(ADC_UNREG_POWER) * BATTERY_SCALE_FACTOR) >> 10;
+}