2014-01-15 10:47:27 -08:00
/*
* Copyright ( c ) 2013 , The Linux Foundation . All rights reserved .
*
* This software is licensed under the terms of the GNU General Public
* License version 2 , as published by the Free Software Foundation , and
* may be copied , distributed , and modified under those terms .
*
* 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 .
*/
# include <linux/bitops.h>
# include <linux/export.h>
# include <linux/regmap.h>
# include <linux/reset-controller.h>
# include <linux/delay.h>
# include "reset.h"
static int qcom_reset ( struct reset_controller_dev * rcdev , unsigned long id )
{
rcdev - > ops - > assert ( rcdev , id ) ;
udelay ( 1 ) ;
rcdev - > ops - > deassert ( rcdev , id ) ;
return 0 ;
}
static int
qcom_reset_assert ( struct reset_controller_dev * rcdev , unsigned long id )
{
struct qcom_reset_controller * rst ;
const struct qcom_reset_map * map ;
u32 mask ;
rst = to_qcom_reset_controller ( rcdev ) ;
map = & rst - > reset_map [ id ] ;
mask = BIT ( map - > bit ) ;
return regmap_update_bits ( rst - > regmap , map - > reg , mask , mask ) ;
}
static int
qcom_reset_deassert ( struct reset_controller_dev * rcdev , unsigned long id )
{
struct qcom_reset_controller * rst ;
const struct qcom_reset_map * map ;
u32 mask ;
rst = to_qcom_reset_controller ( rcdev ) ;
map = & rst - > reset_map [ id ] ;
mask = BIT ( map - > bit ) ;
return regmap_update_bits ( rst - > regmap , map - > reg , mask , 0 ) ;
}
2016-02-25 10:45:12 +01:00
const struct reset_control_ops qcom_reset_ops = {
2014-01-15 10:47:27 -08:00
. reset = qcom_reset ,
. assert = qcom_reset_assert ,
. deassert = qcom_reset_deassert ,
} ;
EXPORT_SYMBOL_GPL ( qcom_reset_ops ) ;