summaryrefslogtreecommitdiff
path: root/plat/sun50iw1p1/scp/interfaces/arisc_axp.c
diff options
context:
space:
mode:
Diffstat (limited to 'plat/sun50iw1p1/scp/interfaces/arisc_axp.c')
-rw-r--r--plat/sun50iw1p1/scp/interfaces/arisc_axp.c402
1 files changed, 0 insertions, 402 deletions
diff --git a/plat/sun50iw1p1/scp/interfaces/arisc_axp.c b/plat/sun50iw1p1/scp/interfaces/arisc_axp.c
deleted file mode 100644
index a33cfe2..0000000
--- a/plat/sun50iw1p1/scp/interfaces/arisc_axp.c
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * drivers/arisc/interfaces/arisc_axp.c
- *
- * Copyright (c) 2012 Allwinner.
- * 2012-10-01 Written by superm (superm@allwinnertech.com).
- *
- * 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 program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include "../arisc_i.h"
-
-/* nmi isr node, record current nmi interrupt handler and argument */
-nmi_isr_t nmi_isr_node[2];
-
-/**
- * register call-back function, call-back function is for arisc notify some event to ac327,
- * axp/rtc interrupt for external interrupt NMI.
- * @type: nmi type, pmu/rtc;
- * @func: call-back function;
- * @para: parameter for call-back function;
- *
- * @return: result, 0 - register call-back function successed;
- * !0 - register call-back function failed;
- * NOTE: the function is like "int callback(void *para)";
- * this function will execute in system ISR.
- */
-int arisc_nmi_cb_register(uint32_t type, arisc_cb_t func, void *para)
-{
- if (nmi_isr_node[type].handler) {
- if(func == nmi_isr_node[type].handler) {
- ARISC_WRN("nmi interrupt handler register already\n");
- return 0;
- }
- /* just output warning message, overlay handler */
- ARISC_WRN("nmi interrupt handler register already\n");
- return -EINVAL;
- }
- nmi_isr_node[type].handler = func;
- nmi_isr_node[type].arg = para;
-
- return 0;
-}
-
-
-/**
- * unregister call-back function.
- * @type: nmi type, pmu/rtc;
- * @func: call-back function which need be unregister;
- */
-void arisc_nmi_cb_unregister(uint32_t type, arisc_cb_t func)
-{
- if ((nmi_isr_node[type].handler) != (func)) {
- /* invalid handler */
- ARISC_WRN("invalid handler for unreg\n\n");
- return ;
- }
- nmi_isr_node[type].handler = NULL;
- nmi_isr_node[type].arg = NULL;
-}
-
-int arisc_disable_nmi_irq(void)
-{
- int result;
- struct arisc_message *pmessage;
-
- /* allocate a message frame */
- pmessage = arisc_message_allocate(ARISC_MESSAGE_ATTR_HARDSYN);
- if (pmessage == NULL) {
- ARISC_WRN("allocate message failed\n");
- return -ENOMEM;
- }
-
- /* initialize message */
- pmessage->type = ARISC_AXP_DISABLE_IRQ;
- pmessage->state = ARISC_MESSAGE_INITIALIZED;
- pmessage->cb.handler = NULL;
- pmessage->cb.arg = NULL;
-
- /* send message use hwmsgbox */
- arisc_hwmsgbox_send_message(pmessage, ARISC_SEND_MSG_TIMEOUT);
-
- /* free message */
- result = pmessage->result;
- arisc_message_free(pmessage);
-
- return result;
-}
-
-int arisc_enable_nmi_irq(void)
-{
- int result;
- struct arisc_message *pmessage;
-
- /* allocate a message frame */
- pmessage = arisc_message_allocate(ARISC_MESSAGE_ATTR_HARDSYN);
- if (pmessage == NULL) {
- ARISC_WRN("allocate message failed\n");
- return -ENOMEM;
- }
-
- /* initialize message */
- pmessage->type = ARISC_AXP_ENABLE_IRQ;
- pmessage->state = ARISC_MESSAGE_INITIALIZED;
- pmessage->cb.handler = NULL;
- pmessage->cb.arg = NULL;
-
- /* send message use hwmsgbox */
- arisc_hwmsgbox_send_message(pmessage, ARISC_SEND_MSG_TIMEOUT);
-
- /* free message */
- result = pmessage->result;
- arisc_message_free(pmessage);
-
- return result;
-}
-
-int arisc_clear_nmi_status(void)
-{
- int result;
- struct arisc_message *pmessage;
-
- /* allocate a message frame */
- pmessage = arisc_message_allocate(ARISC_MESSAGE_ATTR_HARDSYN);
- if (pmessage == NULL) {
- ARISC_WRN("allocate message failed\n");
- return -ENOMEM;
- }
-
- /* initialize message */
- pmessage->type = ARISC_CLR_NMI_STATUS;
- pmessage->state = ARISC_MESSAGE_INITIALIZED;
- pmessage->cb.handler = NULL;
- pmessage->cb.arg = NULL;
-
- /* send message use hwmsgbox */
- arisc_hwmsgbox_send_message(pmessage, ARISC_SEND_MSG_TIMEOUT);
-
- /* free message */
- result = pmessage->result;
- arisc_message_free(pmessage);
-
- return result;
-}
-
-int arisc_set_nmi_trigger(uint32_t type)
-{
- int result;
- struct arisc_message *pmessage;
-
- /* allocate a message frame */
- pmessage = arisc_message_allocate(ARISC_MESSAGE_ATTR_HARDSYN);
- if (pmessage == NULL) {
- ARISC_WRN("allocate message failed\n");
- return -ENOMEM;
- }
-
- /* initialize message */
- pmessage->type = ARISC_SET_NMI_TRIGGER;
- pmessage->state = ARISC_MESSAGE_INITIALIZED;
- pmessage->cb.handler = NULL;
- pmessage->cb.arg = NULL;
- pmessage->paras[0] = type;
-
- /* send message use hwmsgbox */
- arisc_hwmsgbox_send_message(pmessage, ARISC_SEND_MSG_TIMEOUT);
-
- /* free message */
- result = pmessage->result;
- arisc_message_free(pmessage);
-
- return result;
-}
-
-int arisc_axp_get_chip_id(unsigned char *chip_id)
-{
- int i;
- int result;
- struct arisc_message *pmessage;
-
- /* allocate a message frame */
- pmessage = arisc_message_allocate(ARISC_MESSAGE_ATTR_HARDSYN);
- if (pmessage == NULL) {
- ARISC_WRN("allocate message failed\n");
- return -ENOMEM;
- }
-
- /* initialize message */
- pmessage->type = ARISC_AXP_GET_CHIP_ID;
- pmessage->state = ARISC_MESSAGE_INITIALIZED;
- pmessage->cb.handler = NULL;
- pmessage->cb.arg = NULL;
-
- memset((void *)pmessage->paras, 0, 16);
-
- /* send message use hwmsgbox */
- arisc_hwmsgbox_send_message(pmessage, ARISC_SEND_MSG_TIMEOUT);
-
- /* |paras[0] |paras[1] |paras[2] |paras[3] |
- * |chip_id[0~3]|chip_id[4~7]|chip_id[8~11]|chip_id[12~15]|
- */
- /* copy message readout data to user data buffer */
- for (i = 0; i < 4; i++) {
- chip_id[i] = (pmessage->paras[0] >> (i * 8)) & 0xff;
- chip_id[4 + i] = (pmessage->paras[1] >> (i * 8)) & 0xff;
- chip_id[8 + i] = (pmessage->paras[2] >> (i * 8)) & 0xff;
- chip_id[12 + i] = (pmessage->paras[3] >> (i * 8)) & 0xff;
- }
-
- /* free message */
- result = pmessage->result;
- arisc_message_free(pmessage);
-
- return result;
-}
-
-int arisc_set_led_bln(uint32_t *paras)
-{
- int result;
- struct arisc_message *pmessage;
-
- /* allocate a message frame */
- pmessage = arisc_message_allocate(ARISC_MESSAGE_ATTR_HARDSYN);
- if (pmessage == NULL) {
- ARISC_WRN("allocate message failed\n");
- return -ENOMEM;
- }
-
- /* initialize message */
- pmessage->type = ARISC_SET_LED_BLN;
- pmessage->paras[0] = paras[0];
- pmessage->paras[1] = paras[1];
- pmessage->paras[2] = paras[2];
- pmessage->paras[3] = paras[3];
-
- /* send message use hwmsgbox */
- arisc_hwmsgbox_send_message(pmessage, ARISC_SEND_MSG_TIMEOUT);
-
- /* free message */
- result = pmessage->result;
- arisc_message_free(pmessage);
-
- return result;
-
-}
-
-#if (defined CONFIG_ARCH_SUN8IW5P1) || (defined CONFIG_ARCH_SUN50IW1P1)
-int arisc_adjust_pmu_chgcur(uint32_t max_chgcur, uint32_t chg_ic_temp, uint32_t flag)
-{
- int result;
- struct arisc_message *pmessage;
-
- /* allocate a message frame */
- pmessage = arisc_message_allocate(ARISC_MESSAGE_ATTR_HARDSYN);
- if (pmessage == NULL) {
- ARISC_WRN("allocate message failed\n");
- return -ENOMEM;
- }
-
- /* initialize message */
- pmessage->type = ARISC_AXP_SET_PARAS;
- pmessage->paras[0] = chg_ic_temp;
- pmessage->paras[1] = max_chgcur;
- pmessage->paras[2] = flag;
-
- /* send message use hwmsgbox */
- arisc_hwmsgbox_send_message(pmessage, ARISC_SEND_MSG_TIMEOUT);
-
- /* free message */
- result = pmessage->result;
- arisc_message_free(pmessage);
-
- return result;
-}
-#endif
-
-int arisc_set_pwr_tree(uint32_t *pwr_tree)
-{
- int result;
- struct arisc_message *pmessage;
-
- /* allocate a message frame */
- pmessage = arisc_message_allocate(ARISC_MESSAGE_ATTR_HARDSYN);
- if (pmessage == NULL) {
- ARISC_WRN("allocate message failed\n");
- return -ENOMEM;
- }
-
- /* initialize message */
- pmessage->type = ARISC_SET_PWR_TREE;
- memcpy((void *)pmessage->paras, (void *)pwr_tree, sizeof(int)*DM_MAX);
-
- /* send message use hwmsgbox */
- arisc_hwmsgbox_send_message(pmessage, ARISC_SEND_MSG_TIMEOUT);
-
- /* free message */
- result = pmessage->result;
- arisc_message_free(pmessage);
-
- return result;
-}
-
-int arisc_axp_int_notify(struct arisc_message *pmessage)
-{
- uint32_t type = pmessage->paras[0];
- uint32_t ret = 0;
-
- if (type & NMI_INT_TYPE_PMU_OFFSET) {
- /* call pmu interrupt handler */
- if (nmi_isr_node[NMI_INT_TYPE_PMU].handler == NULL) {
- ARISC_WRN("pmu irq handler not install\n");
- return 1;
- }
-
- ARISC_INF("call pmu interrupt handler\n");
- ret |= (*(nmi_isr_node[NMI_INT_TYPE_PMU].handler))(nmi_isr_node[NMI_INT_TYPE_PMU].arg);
- }
- if (type & NMI_INT_TYPE_RTC_OFFSET)
- {
- /* call rtc interrupt handler */
- if (nmi_isr_node[NMI_INT_TYPE_RTC].handler == NULL) {
- ARISC_WRN("rtc irq handler not install\n");
- return 1;
- }
-
- ARISC_INF("call rtc interrupt handler\n");
- ret |= (*(nmi_isr_node[NMI_INT_TYPE_RTC].handler))(nmi_isr_node[NMI_INT_TYPE_RTC].arg);
- }
-
- return ret;
-}
-
-int arisc_pmu_set_voltage(uint32_t type, uint32_t voltage)
-{
- int result;
- struct arisc_message *pmessage;
-
- /* allocate a message frame */
- pmessage = arisc_message_allocate(ARISC_MESSAGE_ATTR_HARDSYN);
- if (pmessage == NULL) {
- ARISC_WRN("allocate message failed\n");
- return -ENOMEM;
- }
-
- /* initialize message */
- pmessage->type = ARISC_SET_PMU_VOLT;
- pmessage->state = ARISC_MESSAGE_INITIALIZED;
- pmessage->cb.handler = NULL;
- pmessage->cb.arg = NULL;
- pmessage->paras[0] = type;
- pmessage->paras[1] = voltage;
-
- /* send message use hwmsgbox */
- arisc_hwmsgbox_send_message(pmessage, ARISC_SEND_MSG_TIMEOUT);
-
- /* free message */
- result = pmessage->result;
- arisc_message_free(pmessage);
-
- return result;
-}
-
-int arisc_pmu_get_voltage(uint32_t type, uint32_t *voltage)
-{
- int result;
- struct arisc_message *pmessage;
-
- /* allocate a message frame */
- pmessage = arisc_message_allocate(ARISC_MESSAGE_ATTR_HARDSYN);
- if (pmessage == NULL) {
- ARISC_WRN("allocate message failed\n");
- return -ENOMEM;
- }
-
- /* initialize message */
- pmessage->type = ARISC_GET_PMU_VOLT;
- pmessage->state = ARISC_MESSAGE_INITIALIZED;
- pmessage->cb.handler = NULL;
- pmessage->cb.arg = NULL;
- pmessage->paras[0] = type;
-
- /* send message use hwmsgbox */
- arisc_hwmsgbox_send_message(pmessage, ARISC_SEND_MSG_TIMEOUT);
- *voltage = pmessage->paras[1];
-
- /* free message */
- result = pmessage->result;
- arisc_message_free(pmessage);
-
- return result;
-}