espi: mec172x kbc: Enable custom configs
Enable custom configs for KBC IBF event data and KBC OBF callback from ISR. Signed-off-by: Jay Vasanth <jay.vasanth@microchip.com>
This commit is contained in:
parent
b530be4591
commit
32bc328f8b
2 changed files with 65 additions and 2 deletions
|
@ -154,3 +154,17 @@ config ESPI_PERIPHERAL_ACPI_EC_IBF_EVT_DATA
|
||||||
to callback.
|
to callback.
|
||||||
|
|
||||||
endif #ESPI_XEC_V2
|
endif #ESPI_XEC_V2
|
||||||
|
|
||||||
|
if ESPI_PERIPHERAL_8042_KBC
|
||||||
|
|
||||||
|
config ESPI_PERIPHERAL_KBC_IBF_EVT_DATA
|
||||||
|
bool "KBC event data format in IBF"
|
||||||
|
help
|
||||||
|
Enable espi_evt_data_kbc format for encoding event in KBC IBF ISR
|
||||||
|
|
||||||
|
config ESPI_PERIPHERAL_KBC_OBE_CBK
|
||||||
|
bool "KBC OBE Callback"
|
||||||
|
help
|
||||||
|
Enable KBC OBE callback from OBE ISR
|
||||||
|
|
||||||
|
endif #ESPI_PERIPHERAL_8042_KBC
|
||||||
|
|
|
@ -191,7 +191,27 @@ static void kbc0_ibf_isr(const struct device *dev)
|
||||||
struct espi_xec_data *const data =
|
struct espi_xec_data *const data =
|
||||||
(struct espi_xec_data *const)dev->data;
|
(struct espi_xec_data *const)dev->data;
|
||||||
|
|
||||||
|
#ifdef CONFIG_ESPI_PERIPHERAL_KBC_IBF_EVT_DATA
|
||||||
|
/* Chrome solution */
|
||||||
|
struct espi_event evt = {
|
||||||
|
ESPI_BUS_PERIPHERAL_NOTIFICATION,
|
||||||
|
ESPI_PERIPHERAL_8042_KBC,
|
||||||
|
ESPI_PERIPHERAL_NODATA,
|
||||||
|
};
|
||||||
|
struct espi_evt_data_kbc *kbc_evt =
|
||||||
|
(struct espi_evt_data_kbc *)&evt.evt_data;
|
||||||
|
/*
|
||||||
|
* Indicates if the host sent a command or data.
|
||||||
|
* 0 = data
|
||||||
|
* 1 = Command.
|
||||||
|
*/
|
||||||
|
kbc_evt->type = kbc_hw->EC_KBC_STS & MCHP_KBC_STS_CD ? 1 : 0;
|
||||||
|
/* The data in KBC Input Buffer */
|
||||||
|
kbc_evt->data = kbc_hw->EC_DATA;
|
||||||
|
/* KBC Input Buffer Full event */
|
||||||
|
kbc_evt->evt = HOST_KBC_EVT_IBF;
|
||||||
|
#else
|
||||||
|
/* Windows solution */
|
||||||
/* The high byte contains information from the host,
|
/* The high byte contains information from the host,
|
||||||
* and the lower byte speficies if the host sent
|
* and the lower byte speficies if the host sent
|
||||||
* a command or data. 1 = Command.
|
* a command or data. 1 = Command.
|
||||||
|
@ -205,7 +225,7 @@ static void kbc0_ibf_isr(const struct device *dev)
|
||||||
.evt_details = ESPI_PERIPHERAL_8042_KBC,
|
.evt_details = ESPI_PERIPHERAL_8042_KBC,
|
||||||
.evt_data = isr_data
|
.evt_data = isr_data
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
espi_send_callbacks(&data->callbacks, dev, evt);
|
espi_send_callbacks(&data->callbacks, dev, evt);
|
||||||
|
|
||||||
mchp_xec_ecia_info_girq_src_clr(xec_kbc0_cfg.ibf_ecia_info);
|
mchp_xec_ecia_info_girq_src_clr(xec_kbc0_cfg.ibf_ecia_info);
|
||||||
|
@ -213,8 +233,37 @@ static void kbc0_ibf_isr(const struct device *dev)
|
||||||
|
|
||||||
static void kbc0_obe_isr(const struct device *dev)
|
static void kbc0_obe_isr(const struct device *dev)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_ESPI_PERIPHERAL_KBC_OBE_CBK
|
||||||
|
/* Chrome solution */
|
||||||
|
struct espi_xec_data *const data =
|
||||||
|
(struct espi_xec_data *const)dev->data;
|
||||||
|
|
||||||
|
struct espi_event evt = {
|
||||||
|
ESPI_BUS_PERIPHERAL_NOTIFICATION,
|
||||||
|
ESPI_PERIPHERAL_8042_KBC,
|
||||||
|
ESPI_PERIPHERAL_NODATA,
|
||||||
|
};
|
||||||
|
struct espi_evt_data_kbc *kbc_evt =
|
||||||
|
(struct espi_evt_data_kbc *)&evt.evt_data;
|
||||||
|
|
||||||
|
/* Disable KBC OBE interrupt first */
|
||||||
|
mchp_xec_ecia_info_girq_src_dis(xec_kbc0_cfg.obe_ecia_info);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Notify application that host already read out data. The application
|
||||||
|
* might need to clear status register via espi_api_lpc_write_request()
|
||||||
|
* with E8042_CLEAR_FLAG opcode in callback.
|
||||||
|
*/
|
||||||
|
kbc_evt->evt = HOST_KBC_EVT_OBE;
|
||||||
|
kbc_evt->data = 0;
|
||||||
|
kbc_evt->type = 0;
|
||||||
|
|
||||||
|
espi_send_callbacks(&data->callbacks, dev, evt);
|
||||||
|
#else
|
||||||
|
/* Windows solution */
|
||||||
/* disable and clear GIRQ interrupt and status */
|
/* disable and clear GIRQ interrupt and status */
|
||||||
mchp_xec_ecia_info_girq_src_dis(xec_kbc0_cfg.obe_ecia_info);
|
mchp_xec_ecia_info_girq_src_dis(xec_kbc0_cfg.obe_ecia_info);
|
||||||
|
#endif
|
||||||
mchp_xec_ecia_info_girq_src_clr(xec_kbc0_cfg.obe_ecia_info);
|
mchp_xec_ecia_info_girq_src_clr(xec_kbc0_cfg.obe_ecia_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue