From 2164aab9020bb37ec71a24461c4c42bc4e2eb2d3 Mon Sep 17 00:00:00 2001 From: Andrew Ryabinin Date: Thu, 3 Nov 2011 11:53:02 +0000 Subject: Added HiFiMAN HM-801 target. FS#12355. This also renames tda1543.{ch} used by HM-60x to dummy_codec.{ch} as it works for PCM1704 used by HM-801. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30891 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/rk27xx/hm801/button-hm801.c | 68 ++++++++++++++++++++++ firmware/target/arm/rk27xx/hm801/button-target.h | 47 +++++++++++++++ firmware/target/arm/rk27xx/hm801/power-hm801.c | 49 ++++++++++++++++ firmware/target/arm/rk27xx/hm801/powermgmt-hm801.c | 60 +++++++++++++++++++ 4 files changed, 224 insertions(+) create mode 100644 firmware/target/arm/rk27xx/hm801/button-hm801.c create mode 100644 firmware/target/arm/rk27xx/hm801/button-target.h create mode 100644 firmware/target/arm/rk27xx/hm801/power-hm801.c create mode 100644 firmware/target/arm/rk27xx/hm801/powermgmt-hm801.c (limited to 'firmware/target/arm/rk27xx/hm801') diff --git a/firmware/target/arm/rk27xx/hm801/button-hm801.c b/firmware/target/arm/rk27xx/hm801/button-hm801.c new file mode 100644 index 0000000000..8e3d46bf0d --- /dev/null +++ b/firmware/target/arm/rk27xx/hm801/button-hm801.c @@ -0,0 +1,68 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2011 Andrew Ryabinin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "config.h" +#include "system.h" +#include "button.h" +#include "adc.h" + +void button_init_device(void) { + /* setup button gpio as input */ + GPIO_PCCON &= ~(POWEROFF_BUTTON); +} + +int button_read_device(void) { + int adc_val = adc_read(ADC_BUTTONS); + int button = 0; + + if (adc_val < 480) { /* middle */ + if (adc_val < 200) { /* 200 - 0 */ + if (adc_val < 30) { + button = BUTTON_UP; + } else { + button = BUTTON_RIGHT; /* 30 - 200 */ + } + } else { /* 200 - 480 */ + if (adc_val < 370) { + button = BUTTON_SELECT; + } else { + button = BUTTON_DOWN; + } + } + } else { /* > 480 */ + if (adc_val < 690) { /* 480 - 690 */ + if (adc_val < 580) { + button = BUTTON_LEFT; + } else { + button = BUTTON_NEXT; + } + } else { /* > 680 */ + if (adc_val < 840) { + button = BUTTON_PREV; + } else { + if (adc_val < 920) { + button = BUTTON_PLAY; + } + } + } + } + return button | (GPIO_PCDR & POWEROFF_BUTTON); +} diff --git a/firmware/target/arm/rk27xx/hm801/button-target.h b/firmware/target/arm/rk27xx/hm801/button-target.h new file mode 100644 index 0000000000..4af054b07c --- /dev/null +++ b/firmware/target/arm/rk27xx/hm801/button-target.h @@ -0,0 +1,47 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2011 Andrew Ryabinin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * 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 +#include "config.h" + +void button_init_device(void); +int button_read_device(void); + + +#define BUTTON_UP 0x00000001 +#define BUTTON_DOWN 0x00000004 +#define BUTTON_LEFT 0x00000008 +#define BUTTON_RIGHT 0x00000010 +#define BUTTON_SELECT 0x00000020 +#define BUTTON_NEXT 0x00000040 +#define BUTTON_PREV 0x00000080 +#define BUTTON_PLAY 0x00000100 + + +#define BUTTON_REMOTE 0 + + +#define POWEROFF_BUTTON 0x02 +#define POWEROFF_COUNT 30 + +#endif /* _BUTTON_TARGET_H_ */ diff --git a/firmware/target/arm/rk27xx/hm801/power-hm801.c b/firmware/target/arm/rk27xx/hm801/power-hm801.c new file mode 100644 index 0000000000..18a0566a78 --- /dev/null +++ b/firmware/target/arm/rk27xx/hm801/power-hm801.c @@ -0,0 +1,49 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright © 2009 Bertrik Sikken + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include +#include "config.h" +#include "inttypes.h" +#include "power.h" +#include "panic.h" +#include "system.h" +#include "usb_core.h" /* for usb_charging_maxcurrent_change */ + +void power_off(void) +{ + GPIO_PCDR &= ~(1<<0); + while(1); +} + +void power_init(void) +{ + GPIO_PCDR |= (1<<0); + GPIO_PCCON |= (1<<0); +} + +unsigned int power_input_status(void) +{ + return (usb_detect() == USB_INSERTED) ? POWER_INPUT_MAIN_CHARGER : POWER_INPUT_NONE; +} + +bool charging_state(void) +{ + return true; +} diff --git a/firmware/target/arm/rk27xx/hm801/powermgmt-hm801.c b/firmware/target/arm/rk27xx/hm801/powermgmt-hm801.c new file mode 100644 index 0000000000..a815d893b2 --- /dev/null +++ b/firmware/target/arm/rk27xx/hm801/powermgmt-hm801.c @@ -0,0 +1,60 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright © 2011 Andrew Ryabinin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * 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 "adc-target.h" +#include "powermgmt.h" + +/* Battery voltage calculation and discharge/charge curves for the HiFiMAN HM-801. + + I don't know how to calculate battery voltage, so all values represented here is just + values from adc battery channel, not millivolts. + Discharge and charge curves have not been calibrated yet. +*/ + +const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] = +{ + /* OF power off device when this value reached */ + 430 +}; + +const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] = +{ + 425 +}; + +/* adc values of 0%, 10%, ... 100% when charging disabled */ +const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] = +{ + /* TODO: simple uncalibrated curve */ + { 425, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520 } +}; + +/* adc values of 0%, 10%, ... 100% when charging enabled */ +const unsigned short percent_to_volt_charge[11] = + /* TODO: simple uncalibrated curve */ + { 425, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520 }; + +unsigned int battery_adc_voltage(void) +{ + return adc_read(ADC_BATTERY); +} -- cgit v1.2.3