Skip to content

Commit

Permalink
Improve shutdown code
Browse files Browse the repository at this point in the history
  • Loading branch information
Quarx2k committed Sep 3, 2014
1 parent 637b28b commit 46a0a50
Showing 1 changed file with 98 additions and 1 deletion.
99 changes: 98 additions & 1 deletion arch/arm/mach-omap2/board-mapphone.c
Expand Up @@ -1482,7 +1482,7 @@ u32 omap_pmic_voltage_ramp_delay(u8 srid, u8 target_vsel, u8 current_vsel)
#define WARMRESET 1
#define COLDRESET 0

static unsigned long reset_status = COLDRESET ;
static unsigned long reset_status = COLDRESET;
static struct notifier_block mapphone_pm_reboot_notifier;

/* Choose cold or warm reset
Expand Down Expand Up @@ -1555,6 +1555,73 @@ static struct notifier_block mapphone_pm_reboot_notifier = {
};


static struct proc_dir_entry *proc_entry;

ssize_t reset_proc_read(char *page, char **start, off_t off, \
int count, int *eof, void *data)
{
int len;
/* don't visit offset */
if (off > 0) {
*eof = 1;
return 0;
}
len = snprintf(page, sizeof(page), "%x\n", (unsigned int)reset_status);
return len;
}

ssize_t reset_proc_write(struct file *filp, const char __user *buff, \
unsigned long len, void *data)
{
#define MAX_UL_LEN 8
char k_buf[MAX_UL_LEN];
int count = min((unsigned long)MAX_UL_LEN, len);
int ret;

if (copy_from_user(k_buf, buff, count)) {
ret = -EFAULT;
goto err;
} else{
if (k_buf[0] == '0') {
reset_status = COLDRESET;
mapphone_pm_set_reset(1);
printk(KERN_ERR"switch to cold reset\n");
} else if (k_buf[0] == '1') {
reset_status = WARMRESET;
mapphone_pm_set_reset(0);
printk(KERN_ERR"switch to warm reset\n");
} else{
ret = -EFAULT;
goto err;
}
return count;
}
err:
return ret;
}

static void reset_proc_init(void)
{
proc_entry = create_proc_entry("reset_proc", 0660, NULL);
if (proc_entry == NULL) {
printk(KERN_INFO"Couldn't create proc entry\n");
} else{
proc_entry->read_proc = reset_proc_read;
proc_entry->write_proc = reset_proc_write;
/* proc_entry->owner = THIS_MODULE; */
}
}

int __init warmreset_init(char *s)
{
/* configure to warmreset */
reset_status = WARMRESET;
mapphone_pm_set_reset(0);
return 1;
}
__setup("warmreset_debug=", warmreset_init);


/* must match value in drivers/w1/w1_family.h */
#define W1_EEPROM_DS2502 0x89
static struct omap2_hdq_platform_config mapphone_hdq_data = {
Expand Down Expand Up @@ -1705,6 +1772,7 @@ static void __init mapphone_bp_model_init(void)
clk_enable(clkp);
#endif
}
static struct platform_driver cpcap_charger_connected_driver;

static void mapphone_pm_power_off(void)
{
Expand All @@ -1731,8 +1799,36 @@ static void __init mapphone_power_off_init(void)
omap_writew(0x1F, 0x480021D2);
pm_power_off = mapphone_pm_power_off;

platform_driver_register(&cpcap_charger_connected_driver);
}

static void mapphone_pm_reset(void)
{
arch_reset('h', NULL);
}

static int cpcap_charger_connected_probe(struct platform_device *pdev)
{
pm_power_off = mapphone_pm_reset;
return 0;
}

static int cpcap_charger_connected_remove(struct platform_device *pdev)
{
pm_power_off = mapphone_pm_power_off;
return 0;
}

static struct platform_driver cpcap_charger_connected_driver = {
.probe = cpcap_charger_connected_probe,
.remove = cpcap_charger_connected_remove,
.driver = {
.name = "cpcap_charger_connected",
.owner = THIS_MODULE,
},
};


static void __init mapphone_init(void)
{
int ret = 0;
Expand Down Expand Up @@ -1777,6 +1873,7 @@ static void __init mapphone_init(void)
mapphone_sgx_init();
mapphone_power_off_init();
mapphone_sim_init();
reset_proc_init();
}

static void __init mapphone_reserve(void)
Expand Down

0 comments on commit 46a0a50

Please sign in to comment.