drivers: smbus: pch: Wrap respective code with ifdefs
Wrap code for SMBALERT and HOST_NOTIFY with configuration ifdefs. Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
This commit is contained in:
parent
97c55ce46c
commit
e829b72ad5
|
@ -53,11 +53,14 @@ struct pch_data {
|
||||||
struct k_sem completion_sync;
|
struct k_sem completion_sync;
|
||||||
const struct device *dev;
|
const struct device *dev;
|
||||||
|
|
||||||
|
#if defined(CONFIG_SMBUS_INTEL_PCH_SMBALERT)
|
||||||
/* smbalert callback list */
|
/* smbalert callback list */
|
||||||
sys_slist_t smbalert_cbs;
|
sys_slist_t smbalert_cbs;
|
||||||
/* smbalert work */
|
/* smbalert work */
|
||||||
struct k_work smb_alert_work;
|
struct k_work smb_alert_work;
|
||||||
|
#endif /* CONFIG_SMBUS_INTEL_PCH_SMBALERT */
|
||||||
|
|
||||||
|
#if defined(CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY)
|
||||||
/* Host Notify callback list */
|
/* Host Notify callback list */
|
||||||
sys_slist_t host_notify_cbs;
|
sys_slist_t host_notify_cbs;
|
||||||
/* Host Notify work */
|
/* Host Notify work */
|
||||||
|
@ -66,6 +69,7 @@ struct pch_data {
|
||||||
uint8_t notify_addr;
|
uint8_t notify_addr;
|
||||||
/* Host Notify data received */
|
/* Host Notify data received */
|
||||||
uint16_t notify_data;
|
uint16_t notify_data;
|
||||||
|
#endif /* CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY */
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -100,6 +104,7 @@ static void pch_reg_write(const struct device *dev, uint8_t reg, uint8_t val)
|
||||||
#error Wrong PCH Register Access Mode
|
#error Wrong PCH Register Access Mode
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY)
|
||||||
static void host_notify_work(struct k_work *work)
|
static void host_notify_work(struct k_work *work)
|
||||||
{
|
{
|
||||||
struct pch_data *data = CONTAINER_OF(work, struct pch_data,
|
struct pch_data *data = CONTAINER_OF(work, struct pch_data,
|
||||||
|
@ -110,6 +115,28 @@ static void host_notify_work(struct k_work *work)
|
||||||
smbus_fire_callbacks(&data->host_notify_cbs, dev, addr);
|
smbus_fire_callbacks(&data->host_notify_cbs, dev, addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int pch_smbus_host_notify_set_cb(const struct device *dev,
|
||||||
|
struct smbus_callback *cb)
|
||||||
|
{
|
||||||
|
struct pch_data *data = dev->data;
|
||||||
|
|
||||||
|
LOG_DBG("dev %p cb %p", dev, cb);
|
||||||
|
|
||||||
|
return smbus_callback_set(&data->host_notify_cbs, cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pch_smbus_host_notify_remove_cb(const struct device *dev,
|
||||||
|
struct smbus_callback *cb)
|
||||||
|
{
|
||||||
|
struct pch_data *data = dev->data;
|
||||||
|
|
||||||
|
LOG_DBG("dev %p cb %p", dev, cb);
|
||||||
|
|
||||||
|
return smbus_callback_remove(&data->host_notify_cbs, cb);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY */
|
||||||
|
|
||||||
|
#if defined(CONFIG_SMBUS_INTEL_PCH_SMBALERT)
|
||||||
static void smbalert_work(struct k_work *work)
|
static void smbalert_work(struct k_work *work)
|
||||||
{
|
{
|
||||||
struct pch_data *data = CONTAINER_OF(work, struct pch_data,
|
struct pch_data *data = CONTAINER_OF(work, struct pch_data,
|
||||||
|
@ -164,26 +191,7 @@ static int pch_smbus_smbalert_remove_sb(const struct device *dev,
|
||||||
|
|
||||||
return smbus_callback_remove(&data->smbalert_cbs, cb);
|
return smbus_callback_remove(&data->smbalert_cbs, cb);
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_SMBUS_INTEL_PCH_SMBALERT */
|
||||||
static int pch_smbus_host_notify_set_cb(const struct device *dev,
|
|
||||||
struct smbus_callback *cb)
|
|
||||||
{
|
|
||||||
struct pch_data *data = dev->data;
|
|
||||||
|
|
||||||
LOG_DBG("dev %p cb %p", dev, cb);
|
|
||||||
|
|
||||||
return smbus_callback_set(&data->host_notify_cbs, cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int pch_smbus_host_notify_remove_cb(const struct device *dev,
|
|
||||||
struct smbus_callback *cb)
|
|
||||||
{
|
|
||||||
struct pch_data *data = dev->data;
|
|
||||||
|
|
||||||
LOG_DBG("dev %p cb %p", dev, cb);
|
|
||||||
|
|
||||||
return smbus_callback_remove(&data->host_notify_cbs, cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int pch_configure(const struct device *dev, uint32_t config)
|
static int pch_configure(const struct device *dev, uint32_t config)
|
||||||
{
|
{
|
||||||
|
@ -287,13 +295,14 @@ static int pch_smbus_init(const struct device *dev)
|
||||||
data->dev = dev;
|
data->dev = dev;
|
||||||
|
|
||||||
/* Initialize work structures */
|
/* Initialize work structures */
|
||||||
if (IS_ENABLED(CONFIG_SMBUS_INTEL_PCH_SMBALERT)) {
|
|
||||||
k_work_init(&data->smb_alert_work, smbalert_work);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY)) {
|
#if defined(CONFIG_SMBUS_INTEL_PCH_SMBALERT)
|
||||||
k_work_init(&data->host_notify_work, host_notify_work);
|
k_work_init(&data->smb_alert_work, smbalert_work);
|
||||||
}
|
#endif /* CONFIG_SMBUS_INTEL_PCH_SMBALERT */
|
||||||
|
|
||||||
|
#if defined(CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY)
|
||||||
|
k_work_init(&data->host_notify_work, host_notify_work);
|
||||||
|
#endif /* CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY */
|
||||||
|
|
||||||
config->config_func(dev);
|
config->config_func(dev);
|
||||||
|
|
||||||
|
@ -917,10 +926,14 @@ static const struct smbus_driver_api funcs = {
|
||||||
.smbus_block_write = pch_smbus_block_write,
|
.smbus_block_write = pch_smbus_block_write,
|
||||||
.smbus_block_read = pch_smbus_block_read,
|
.smbus_block_read = pch_smbus_block_read,
|
||||||
.smbus_block_pcall = pch_smbus_block_pcall,
|
.smbus_block_pcall = pch_smbus_block_pcall,
|
||||||
|
#if defined(CONFIG_SMBUS_INTEL_PCH_SMBALERT)
|
||||||
.smbus_smbalert_set_cb = pch_smbus_smbalert_set_sb,
|
.smbus_smbalert_set_cb = pch_smbus_smbalert_set_sb,
|
||||||
.smbus_smbalert_remove_cb = pch_smbus_smbalert_remove_sb,
|
.smbus_smbalert_remove_cb = pch_smbus_smbalert_remove_sb,
|
||||||
|
#endif /* CONFIG_SMBUS_INTEL_PCH_SMBALERT */
|
||||||
|
#if defined(CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY)
|
||||||
.smbus_host_notify_set_cb = pch_smbus_host_notify_set_cb,
|
.smbus_host_notify_set_cb = pch_smbus_host_notify_set_cb,
|
||||||
.smbus_host_notify_remove_cb = pch_smbus_host_notify_remove_cb,
|
.smbus_host_notify_remove_cb = pch_smbus_host_notify_remove_cb,
|
||||||
|
#endif /* CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY */
|
||||||
};
|
};
|
||||||
|
|
||||||
static void smbus_isr(const struct device *dev)
|
static void smbus_isr(const struct device *dev)
|
||||||
|
@ -942,8 +955,8 @@ static void smbus_isr(const struct device *dev)
|
||||||
*
|
*
|
||||||
* Intel PCH implements Host Notify protocol in hardware.
|
* Intel PCH implements Host Notify protocol in hardware.
|
||||||
*/
|
*/
|
||||||
if (IS_ENABLED(CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY) &&
|
#if defined(CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY)
|
||||||
data->config & SMBUS_MODE_HOST_NOTIFY) {
|
if (data->config & SMBUS_MODE_HOST_NOTIFY) {
|
||||||
status = pch_reg_read(dev, PCH_SMBUS_SSTS);
|
status = pch_reg_read(dev, PCH_SMBUS_SSTS);
|
||||||
if (status & PCH_SMBUS_SSTS_HNS) {
|
if (status & PCH_SMBUS_SSTS_HNS) {
|
||||||
/* Notify address */
|
/* Notify address */
|
||||||
|
@ -963,6 +976,7 @@ static void smbus_isr(const struct device *dev)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY */
|
||||||
|
|
||||||
status = pch_reg_read(dev, PCH_SMBUS_HSTS);
|
status = pch_reg_read(dev, PCH_SMBUS_HSTS);
|
||||||
|
|
||||||
|
@ -974,11 +988,12 @@ static void smbus_isr(const struct device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle SMBALERT# signal */
|
/* Handle SMBALERT# signal */
|
||||||
if (IS_ENABLED(CONFIG_SMBUS_INTEL_PCH_SMBALERT) &&
|
#if defined(CONFIG_SMBUS_INTEL_PCH_SMBALERT)
|
||||||
data->config & SMBUS_MODE_SMBALERT &&
|
if (data->config & SMBUS_MODE_SMBALERT &&
|
||||||
status & PCH_SMBUS_HSTS_SMB_ALERT) {
|
status & PCH_SMBUS_HSTS_SMB_ALERT) {
|
||||||
k_work_submit(&data->smb_alert_work);
|
k_work_submit(&data->smb_alert_work);
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_SMBUS_INTEL_PCH_SMBALERT */
|
||||||
|
|
||||||
/* Clear IRQ sources */
|
/* Clear IRQ sources */
|
||||||
pch_reg_write(dev, PCH_SMBUS_HSTS, status);
|
pch_reg_write(dev, PCH_SMBUS_HSTS, status);
|
||||||
|
|
Loading…
Reference in a new issue