mif_dt_read_u32 (np, "mif,int_ap2cp_wakeup", mbox->int_ap2cp_wakeup);
mif_dt_read_u32 (np, "mif,int_ap2cp_status", mbox->int_ap2cp_status);
mif_dt_read_u32 (np, "mif,int_ap2cp_active", mbox->int_ap2cp_active);
+ mif_dt_read_u32 (np, "mif,int_ap2cp_lcd_status", mbox->int_ap2cp_lcd_status);
mif_dt_read_u32 (np, "mif,irq_cp2ap_msg", mbox->irq_cp2ap_msg);
mif_dt_read_u32 (np, "mif,irq_cp2ap_status", mbox->irq_cp2ap_status);
mif_dt_read_u32 (np, "sbi_sys_rev_pos", mbox->sbi_sys_rev_pos);
mif_dt_read_u32 (np, "sbi_ds_det_mask", mbox->sbi_ds_det_mask);
mif_dt_read_u32 (np, "sbi_ds_det_pos", mbox->sbi_ds_det_pos);
+ mif_dt_read_u32 (np, "sbi_lcd_status_mask", mbox->sbi_lcd_status_mask);
+ mif_dt_read_u32 (np, "sbi_lcd_status_pos", mbox->sbi_lcd_status_pos);
return 0;
}
#include "modem_utils.h"
#include "modem_link_device_shmem.h"
#include "uart_switch.h"
+#include "../../video/fbdev/exynos/dpu20/decon.h"
#define MIF_INIT_TIMEOUT (15 * HZ)
#define MBREG_MAX_NUM 64
static struct modem_ctl *g_mc;
+static int s333ap_lcd_notifier(struct notifier_block *notifier,
+ unsigned long event, void *v);
static ssize_t modem_ctrl_show(struct device *dev,
struct device_attribute *attr, char *buf)
spin_unlock_irqrestore(&mc->ap_status_lock, flags);
+ mif_info("LCD_ON Notificaion\n");
spin_lock_irqsave(&mc->ap_status_lock, flags);
mbox_update_value(MCU_CP, mc->mbx_ap_status, 1,
mc->sbi_pda_active_mask, mc->sbi_pda_active_pos);
mbox_update_value(MCU_CP, mc->mbx_ap_status, 1,
mc->sbi_ap_status_mask, mc->sbi_ap_status_pos);
+ mbox_update_value(MCU_CP, mc->mbx_ap_status, 1,
+ mc->sbi_lcd_status_mask, mc->sbi_lcd_status_pos);
spin_unlock_irqrestore(&mc->ap_status_lock, flags);
if (mc->ap2cp_cfg_ioaddr) {
static int sh333ap_boot_done(struct modem_ctl *mc)
{
+ int ret;
+
mif_info("+++\n");
if (wake_lock_active(&mc->mc_wake_lock))
wake_unlock(&mc->mc_wake_lock);
+ if (mc->lcd_notifier.notifier_call == NULL) {
+ mif_info("Register lcd notifier\n");
+ mc->lcd_notifier.notifier_call = s333ap_lcd_notifier;
+ ret = register_lcd_status_notifier(&mc->lcd_notifier);
+ if (ret) {
+ mif_err("failed to register LCD notifier");
+ return ret;
+ }
+ }
+
#ifdef CONFIG_UART_SWITCH
mif_err("Recheck UART direction.\n");
cp_recheck_uart_dir();
mc->sbi_uart_noti_mask = mbx->sbi_uart_noti_mask;
mc->sbi_uart_noti_pos = mbx->sbi_uart_noti_pos;
+ mc->sbi_lcd_status_mask = mbx->sbi_lcd_status_mask;
+ mc->sbi_lcd_status_pos = mbx->sbi_lcd_status_pos;
+ mc->int_ap2cp_lcd_status = mbx->int_ap2cp_lcd_status;
+
+}
+
+static int s333ap_lcd_notifier(struct notifier_block *notifier,
+ unsigned long event, void *v)
+{
+ struct modem_ctl *mc =
+ container_of(notifier, struct modem_ctl, lcd_notifier);
+ unsigned long int flags;
+
+ switch (event) {
+ case LCD_OFF:
+ mif_info("LCD_OFF Notification\n");
+ spin_lock_irqsave(&mc->ap_status_lock, flags);
+ mbox_update_value(MCU_CP, mc->mbx_ap_status, 0,
+ mc->sbi_lcd_status_mask,
+ mc->sbi_lcd_status_pos);
+ spin_unlock_irqrestore(&mc->ap_status_lock, flags);
+ mbox_set_interrupt(MCU_CP, mc->int_ap2cp_lcd_status);
+ break;
+
+ case LCD_ON:
+ mif_info("LCD_ON Notificaion\n");
+ mbox_update_value(MCU_CP, mc->mbx_ap_status, 1,
+ mc->sbi_lcd_status_mask,
+ mc->sbi_lcd_status_pos);
+ mbox_set_interrupt(MCU_CP, mc->int_ap2cp_lcd_status);
+ break;
+
+ default:
+ mif_info("lcd_event %ld\n", event);
+ break;
+ }
+
+ return NOTIFY_OK;
}
int init_modemctl_device(struct modem_ctl *mc, struct modem_data *pdata)
int int_ap_status;
spinlock_t ap_status_lock;
+ int int_ap2cp_lcd_status;
+
unsigned int gpio_cp_wakeup;
unsigned int mbx_cp_wakeup;
int int_cp_wakeup;
unsigned int sbi_lte_active_pos;
unsigned int sbi_cp_status_mask;
unsigned int sbi_cp_status_pos;
-
unsigned int sbi_pda_active_mask;
unsigned int sbi_pda_active_pos;
unsigned int sbi_ap_status_mask;
unsigned int sbi_ap_status_pos;
-
unsigned int sbi_uart_noti_mask;
unsigned int sbi_uart_noti_pos;
+ unsigned int sbi_lcd_status_mask;
+ unsigned int sbi_lcd_status_pos;
unsigned int ap2cp_cfg_addr;
void __iomem *ap2cp_cfg_ioaddr;
struct freq_table cpu_table;
struct clk *qch_cp;
+
+ struct notifier_block lcd_notifier;
};
static inline bool cp_offline(struct modem_ctl *mc)