| /********************************************************************* | 
 |  Copyright 2016 by  ZIXC Corporation. | 
 | * | 
 | * FileName::    power.c | 
 | * File Mark: | 
 | * Description: | 
 | * Others: | 
 | * Version:   v1.0 | 
 | * Author:   zhouqi | 
 | * Date:   2014-1-15 | 
 |  | 
 | * History 1: | 
 | *     Date: | 
 | *     Version: | 
 | *     Author: | 
 | *     Modification: | 
 | * History 2: | 
 | **********************************************************************/ | 
 |  | 
 | #include <common.h> | 
 | #include <errno.h> | 
 | #include <command.h> | 
 | #include <malloc.h> | 
 | #include <asm/io.h> | 
 | #include <power.h> | 
 | #include <config.h> | 
 |  | 
 |  | 
 | static struct pmu_opt *s_pmu = NULL; | 
 |  | 
 | /******************************************************************************* | 
 |  * Function:    power_init | 
 |  * Description: | 
 |  * Parameters: | 
 |  *	 Input: | 
 |  * | 
 |  *	 Output: | 
 |  * | 
 |  * Returns: | 
 |  * | 
 |  * | 
 |  * Others: | 
 |  ********************************************************************************/ | 
 | int power_init(void) | 
 | { | 
 |     /* ·ÖÅä½á¹¹Ìå¿Õ¼ä */ | 
 |     s_pmu = malloc(sizeof(struct pmu_opt)); | 
 |     if (!s_pmu) | 
 |     { | 
 |     	printf( "power: out of memory for data structure pmu_opt\n"); | 
 |     	return -EIO; | 
 |     } | 
 |  | 
 |     /* pmu³õʼ»¯ */ | 
 |     pmu_init(); | 
 |  | 
 |     return 0; | 
 |  | 
 | } | 
 |  | 
 |  | 
 | /******************************************************************************* | 
 |  * Function:    register_pmu_opt | 
 |  * Description: | 
 |  * Parameters: | 
 |  *	 Input: | 
 |  * | 
 |  *	 Output: | 
 |  * | 
 |  * Returns: | 
 |  * | 
 |  * | 
 |  * Others: | 
 |  ********************************************************************************/ | 
 | int register_pmu_opt(struct pmu_opt *opt) | 
 | { | 
 |     if( opt->read_reg ) | 
 |         s_pmu->read_reg = opt->read_reg; | 
 |     else | 
 |         return -EIO; | 
 |  | 
 |     if( opt->write_reg ) | 
 |         s_pmu->write_reg = opt->write_reg; | 
 |     else | 
 |         return -EIO; | 
 |  | 
 |     if( opt->get_boot_reason ) | 
 |         s_pmu->get_boot_reason = opt->get_boot_reason; | 
 |     else | 
 |         return -EIO; | 
 |  | 
 |     if( opt->ps_hold_pull_on ) | 
 |         s_pmu->ps_hold_pull_on = opt->ps_hold_pull_on; | 
 |     else | 
 |         return -EIO; | 
 |  | 
 |     if( opt->ps_hold_pull_off ) | 
 |         s_pmu->ps_hold_pull_off = opt->ps_hold_pull_off; | 
 |     else | 
 |         return -EIO; | 
 |  | 
 |     if( opt->ps_hold2_pull_on ) | 
 |         s_pmu->ps_hold2_pull_on = opt->ps_hold2_pull_on; | 
 |  | 
 |     if( opt->ps_hold2_pull_off ) | 
 |         s_pmu->ps_hold2_pull_off = opt->ps_hold2_pull_off; | 
 |  | 
 |     if( opt->power_off ) | 
 |         s_pmu->power_off = opt->power_off; | 
 |     else | 
 |         return -EIO; | 
 |  | 
 |     return SUCCESS; | 
 | } | 
 |  | 
 | /******************************************************************************* | 
 |  * Function:    get_pmu_opt | 
 |  * Description: | 
 |  * Parameters: | 
 |  *	 Input: | 
 |  * | 
 |  *	 Output: | 
 |  * | 
 |  * Returns: | 
 |  * | 
 |  * | 
 |  * Others: | 
 |  ********************************************************************************/ | 
 | struct pmu_opt * get_pmu_opt(void) | 
 | { | 
 |     return s_pmu; | 
 | } | 
 |  |