132 lines
3.4 KiB
C
132 lines
3.4 KiB
C
/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef QPNPINT_H
|
|
#define QPNPINT_H
|
|
|
|
#include <linux/spmi.h>
|
|
|
|
struct qpnp_irq_spec {
|
|
uint8_t slave; /* 0-15 */
|
|
uint8_t per; /* 0-255 */
|
|
uint8_t irq; /* 0-7 */
|
|
};
|
|
|
|
struct qpnp_local_int {
|
|
/* mask - Invoke PMIC Arbiter local mask handler */
|
|
int (*mask)(struct spmi_controller *spmi_ctrl,
|
|
struct qpnp_irq_spec *spec,
|
|
uint32_t priv_d);
|
|
/* unmask - Invoke PMIC Arbiter local unmask handler */
|
|
int (*unmask)(struct spmi_controller *spmi_ctrl,
|
|
struct qpnp_irq_spec *spec,
|
|
uint32_t priv_d);
|
|
/* register_priv_data - Return per irq priv data */
|
|
int (*register_priv_data)(struct spmi_controller *spmi_ctrl,
|
|
struct qpnp_irq_spec *spec,
|
|
uint32_t *priv_d);
|
|
};
|
|
|
|
#ifdef CONFIG_MSM_QPNP_INT
|
|
/**
|
|
* qpnpint_of_init() - Device Tree irq initialization
|
|
*
|
|
* Standard Device Tree init routine to be called from
|
|
* of_irq_init().
|
|
*/
|
|
int __init qpnpint_of_init(struct device_node *node,
|
|
struct device_node *parent);
|
|
|
|
/**
|
|
* qpnpint_register_controller() - Register local interrupt callbacks
|
|
*
|
|
* Used by the PMIC Arbiter driver or equivalent to register
|
|
* callbacks for interrupt events.
|
|
*/
|
|
int qpnpint_register_controller(struct device_node *node,
|
|
struct spmi_controller *ctrl,
|
|
struct qpnp_local_int *li_cb);
|
|
|
|
/**
|
|
* qpnpint_unregister_controller() - Unregister local interrupt callbacks
|
|
*
|
|
* Used by the PMIC Arbiter driver or equivalent to unregister
|
|
* callbacks for interrupt events.
|
|
*/
|
|
int qpnpint_unregister_controller(struct device_node *node);
|
|
|
|
/**
|
|
* qpnpint_handle_irq - Main interrupt handling routine
|
|
*
|
|
* Pass a PMIC Arbiter interrupt to Linux.
|
|
*/
|
|
int qpnpint_handle_irq(struct spmi_controller *spmi_ctrl,
|
|
struct qpnp_irq_spec *spec);
|
|
|
|
/**
|
|
* qpnpint_show_irq - Prints the Linux interrupt number
|
|
*
|
|
* Pass a PMIC Arbiter interrupt to Linux.
|
|
*/
|
|
int qpnpint_show_irq(struct spmi_controller *spmi_ctrl,
|
|
struct qpnp_irq_spec *spec);
|
|
|
|
#ifdef CONFIG_MSM_SHOW_RESUME_IRQ
|
|
extern int msm_show_resume_irq_mask;
|
|
static inline bool qpnpint_show_resume_irq(void)
|
|
{
|
|
return msm_show_resume_irq_mask;
|
|
}
|
|
#else
|
|
static inline bool qpnpint_show_resume_irq(void)
|
|
{
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
#else
|
|
static inline int __init qpnpint_of_init(struct device_node *node,
|
|
struct device_node *parent)
|
|
{
|
|
return -ENXIO;
|
|
}
|
|
|
|
static inline int qpnpint_register_controller(struct device_node *node,
|
|
struct spmi_controller *ctrl,
|
|
struct qpnp_local_int *li_cb)
|
|
{
|
|
return -ENXIO;
|
|
}
|
|
|
|
static inline int qpnpint_unregister_controller(struct device_node *node)
|
|
{
|
|
return -ENXIO;
|
|
}
|
|
|
|
static inline int qpnpint_handle_irq(struct spmi_controller *spmi_ctrl,
|
|
struct qpnp_irq_spec *spec)
|
|
{
|
|
return -ENXIO;
|
|
}
|
|
int qpnpint_show_irq(struct spmi_controller *spmi_ctrl,
|
|
struct qpnp_irq_spec *spec)
|
|
{
|
|
return -ENXIO;
|
|
}
|
|
|
|
static inline bool qpnpint_show_resume_irq(void)
|
|
{
|
|
return false;
|
|
}
|
|
#endif /* CONFIG_MSM_QPNP_INT */
|
|
#endif /* QPNPINT_H */
|