Microchip: MEC172x: eSPI driver
MEC172x eSPI driver, eSPI pin programming, interrupt updates related to eSPI and other updates for MEC172x eSPI driver. Signed-off-by: Jay Vasanth <jay.vasanth@microchip.com>
This commit is contained in:
parent
bf68b670f1
commit
c214c59548
24 changed files with 3291 additions and 79 deletions
|
@ -19,6 +19,7 @@
|
|||
#include <sys/__assert.h>
|
||||
#include <drivers/clock_control/mchp_xec_clock_control.h>
|
||||
#include <drivers/interrupt_controller/intc_mchp_xec_ecia.h>
|
||||
#include <dt-bindings/interrupt-controller/mchp-xec-ecia.h>
|
||||
|
||||
/* defined at the SoC layer */
|
||||
#define MCHP_FIRST_GIRQ MCHP_FIRST_GIRQ_NOS
|
||||
|
@ -186,6 +187,58 @@ void mchp_xec_ecia_nvic_clr_pend(uint32_t nvic_num)
|
|||
NVIC_ClearPendingIRQ(nvic_num);
|
||||
}
|
||||
|
||||
/* API taking input encoded with MCHP_XEC_ECIA(g, gb, na, nd) macro */
|
||||
|
||||
void mchp_xec_ecia_info_girq_aggr_en(int ecia_info, uint8_t enable)
|
||||
{
|
||||
uint8_t girq_num = MCHP_XEC_ECIA_GIRQ(ecia_info);
|
||||
|
||||
mchp_xec_ecia_girq_aggr_en(girq_num, enable);
|
||||
}
|
||||
|
||||
void mchp_xec_ecia_info_girq_src_clr(int ecia_info)
|
||||
{
|
||||
uint8_t girq_num = MCHP_XEC_ECIA_GIRQ(ecia_info);
|
||||
uint8_t bitpos = MCHP_XEC_ECIA_GIRQ_POS(ecia_info);
|
||||
|
||||
mchp_xec_ecia_girq_src_clr(girq_num, bitpos);
|
||||
}
|
||||
|
||||
void mchp_xec_ecia_info_girq_src_en(int ecia_info)
|
||||
{
|
||||
uint8_t girq_num = MCHP_XEC_ECIA_GIRQ(ecia_info);
|
||||
uint8_t bitpos = MCHP_XEC_ECIA_GIRQ_POS(ecia_info);
|
||||
|
||||
mchp_xec_ecia_girq_src_en(girq_num, bitpos);
|
||||
}
|
||||
|
||||
void mchp_xec_ecia_info_girq_src_dis(int ecia_info)
|
||||
{
|
||||
uint8_t girq_num = MCHP_XEC_ECIA_GIRQ(ecia_info);
|
||||
uint8_t bitpos = MCHP_XEC_ECIA_GIRQ_POS(ecia_info);
|
||||
|
||||
mchp_xec_ecia_girq_src_dis(girq_num, bitpos);
|
||||
}
|
||||
|
||||
uint32_t mchp_xec_ecia_info_girq_result(int ecia_info)
|
||||
{
|
||||
uint8_t girq_num = MCHP_XEC_ECIA_GIRQ(ecia_info);
|
||||
|
||||
return mchp_xec_ecia_girq_result(girq_num);
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear NVIC pending status given GIRQ source information encoded by macro
|
||||
* MCHP_XEC_ECIA. For aggregated only sources the ecoding sets direct NVIC
|
||||
* number equal to aggregated NVIC number.
|
||||
*/
|
||||
void mchp_xec_ecia_info_nvic_clr_pend(int ecia_info)
|
||||
{
|
||||
uint8_t nvic_num = MCHP_XEC_ECIA_NVIC_DIRECT(ecia_info);
|
||||
|
||||
mchp_xec_ecia_nvic_clr_pend(nvic_num);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief enable GIRQn interrupt for specific source
|
||||
*
|
||||
|
@ -207,6 +260,20 @@ int mchp_xec_ecia_enable(int girq, int src)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief enable EXTI interrupt for specific line specified by parameter
|
||||
* encoded with MCHP_XEC_ECIA macro.
|
||||
*
|
||||
* @param ecia_info is GIRQ connection encoded with MCHP_XEC_ECIA
|
||||
*/
|
||||
int mchp_xec_ecia_info_enable(int ecia_info)
|
||||
{
|
||||
uint8_t girq = (uint8_t)MCHP_XEC_ECIA_GIRQ(ecia_info);
|
||||
uint8_t src = (uint8_t)MCHP_XEC_ECIA_GIRQ_POS(ecia_info);
|
||||
|
||||
return mchp_xec_ecia_enable(girq, src);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief disable EXTI interrupt for specific line
|
||||
*
|
||||
|
@ -228,6 +295,20 @@ int mchp_xec_ecia_disable(int girq, int src)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief disable EXTI interrupt for specific line specified by parameter
|
||||
* encoded with MCHP_XEC_ECIA macro.
|
||||
*
|
||||
* @param ecia_info is GIRQ connection encoded with MCHP_XEC_ECIA
|
||||
*/
|
||||
int mchp_xec_ecia_info_disable(int ecia_info)
|
||||
{
|
||||
uint8_t girq = (uint8_t)MCHP_XEC_ECIA_GIRQ(ecia_info);
|
||||
uint8_t src = (uint8_t)MCHP_XEC_ECIA_GIRQ_POS(ecia_info);
|
||||
|
||||
return mchp_xec_ecia_disable(girq, src);
|
||||
}
|
||||
|
||||
/* forward reference */
|
||||
static const struct device *get_girq_dev(int girq_num);
|
||||
|
||||
|
@ -279,6 +360,22 @@ int mchp_xec_ecia_set_callback(int girq_num, int src,
|
|||
return mchp_xec_ecia_set_callback_by_dev(dev, src, cb, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief set GIRQn interrupt source callback
|
||||
*
|
||||
* @param ecia_info is GIRQ connection encoded with MCHP_XEC_ECIA
|
||||
* @param cb user callback
|
||||
* @param data user data
|
||||
*/
|
||||
int mchp_xec_ecia_info_set_callback(int ecia_info, mchp_xec_ecia_callback_t cb,
|
||||
void *data)
|
||||
{
|
||||
const struct device *dev = get_girq_dev(MCHP_XEC_ECIA_GIRQ(ecia_info));
|
||||
uint8_t src = MCHP_XEC_ECIA_GIRQ_POS(ecia_info);
|
||||
|
||||
return mchp_xec_ecia_set_callback_by_dev(dev, src, cb, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief unset GIRQn interrupt source callback by device handle
|
||||
*
|
||||
|
@ -321,6 +418,20 @@ int mchp_ecia_unset_callback(int girq_num, int src)
|
|||
return mchp_ecia_unset_callback_by_dev(dev, src);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief unset GIRQn interrupt source callback
|
||||
*
|
||||
* @param ecia_info is GIRQ connection encoded with MCHP_XEC_ECIA
|
||||
*/
|
||||
int mchp_ecia_info_unset_callback(int ecia_info)
|
||||
{
|
||||
const struct device *dev = get_girq_dev(MCHP_XEC_ECIA_GIRQ(ecia_info));
|
||||
uint8_t src = MCHP_XEC_ECIA_GIRQ_POS(ecia_info);
|
||||
|
||||
return mchp_ecia_unset_callback_by_dev(dev, src);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Create a build time flag to know if any aggregated GIRQ has been enabled.
|
||||
* We make use of DT FOREACH macro to check GIRQ node status.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue