Пример #1
0
static ssize_t set_enabled(struct device *dev, struct device_attribute *attr,
		const char *buf, size_t count)
{
	struct omap_wdt_dev *wdev = platform_get_drvdata(omap_wdt_dev);
	char *cp;
	int len = count;

	if (!kernelpet) {
		printk(KERN_WARNING "The watchdog is disabled permanently.\n");
		return -EINVAL;
	}

	cp = memchr(buf, '\n', count);
	if (cp)
		len = cp - buf;
	if (wdev->omap_wdt_users) {
		if (len == sizeof ctrl_off - 1 &&
				strncmp(buf, ctrl_off, len) == 0) {
			if (is_wdt_enabled == WDT_DISABLE) {
				printk(KERN_WARNING
					"The watchdog is already disabled\n");
				return -EINVAL;
			}
			disable_wdt(wdev);
		} else if (len == sizeof ctrl_on - 1 &&
				strncmp(buf, ctrl_on, len) == 0) {
			if (is_wdt_enabled == WDT_ENABLE) {
				printk(KERN_WARNING
					"The watchdog is already enabled\n");
				return -EINVAL;
			}
			enable_wdt(wdev);
		} else {
			printk(KERN_WARNING
				"Invalid enable setting, use on or off\n");
			return -EINVAL;
		}
	}

	return count;
}
//********************** 初期化関数
void initialize(void){

	spi_selectGPS(0);
	spi_selectDrive(0);
	subPIC_power(0);
	i2c_power(0);
	adc_power(0);

	//デバイス初期化
	hmr_device_initialize();
	hmr_clock_initialize_withNormal();
	hmr_interrupt_initalize();

	if(Config_DefaultMobilePhone){
		hmr_uart1_initialize(UART1_MODULEID_MP);
	}else{
		hmr_uart1_initialize(UART1_MODULEID_RF);
	}
	hmr_uart1_power_switch(1,hmr_uart1_getModuleID());

	rs_fputc('O',Stream_VMC);
	rs_fputc('K',Stream_VMC);
	rs_fputc((unsigned char)(RCON),Stream_VMC);
	rs_fputc((unsigned char)(RCON>>8),Stream_VMC);
	rs_fputc(0x0d,Stream_VMC);
	rs_fputc(0x0a,Stream_VMC);

	hmr_uart2_initialize();
	hmr_spi2_initialize();
	hmr_i2c_initialize();
	hmr_adc_initialize();

	rs_fputc('I',Stream_VMC);
	rs_fputc('n',Stream_VMC);
	rs_fputc(0x0d,Stream_VMC);
	rs_fputc(0x0a,Stream_VMC);

	spi_selectGPS(0);
	spi_selectDrive(0);
	subPIC_power(1);
	i2c_power(1);
	adc_power(1);
 //       HMR_PIN_I2C_ACCEL0_PW_set(1);
//        HMR_PIN_ADCPW_CH0to6_set(1);

    HMR_PIN_ADCPW_CH7_set(1);
    HMR_PIN_ADCPW_CH8_set(1);

	rs_fputc('P',Stream_VMC);
	rs_fputc('w',Stream_VMC);
	rs_fputc(0x0d,Stream_VMC);
	rs_fputc(0x0a,Stream_VMC);

	inertial_initialize();

	//通信関連機能の初期化
	pVMC=com_createVMC1();
	vmc1_initialize(pVMC,(const unsigned char*)("hmr"),(const unsigned char*)("ctr"));
	com_initialize();
	msg_initialize();

	rs_fputc('C',Stream_VMC);
	rs_fputc('m',Stream_VMC);
	rs_fputc(0x0d,Stream_VMC);
	rs_fputc(0x0a,Stream_VMC);

	//タスク機能の初期化
//	task_initialize();

	sprite_power(1);
	sprite_initialize();

	set_interrupt_fputflag(Stream_VMC);//割り込み予約
	enable_interrupt_fget(Stream_VMC);
	enable_interrupt_fput(Stream_VMC);

	//Watch dog timer
	if(Config_DisableWatchDogTimer){//DIPがOFFのとき
		disable_wdt();
	}else{
		enable_wdt();
	}

}
Пример #3
0
static int __devinit omap_wdt_probe(struct platform_device *pdev)
{
	struct resource *res, *mem, *res_irq;
	struct omap_wdt_dev *wdev;
	int ret;
#ifdef CONFIG_OMAP_WATCHDOG_CONTROL
	int i;
#endif

	/* reserve static register mappings */
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!res) {
		ret = -ENOENT;
		goto err_get_resource;
	}

	if (omap_wdt_dev) {
		ret = -EBUSY;
		goto err_busy;
	}

	mem = request_mem_region(res->start, resource_size(res), pdev->name);
	if (!mem) {
		ret = -EBUSY;
		goto err_busy;
	}

	res_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);

	wdev = kzalloc(sizeof(struct omap_wdt_dev), GFP_KERNEL);
	if (!wdev) {
		ret = -ENOMEM;
		goto err_kzalloc;
	}

	wdev->omap_wdt_users = 0;
	wdev->mem = mem;
	wdev->dev = &pdev->dev;

	wdev->base = ioremap(res->start, resource_size(res));
	if (!wdev->base) {
		ret = -ENOMEM;
		goto err_ioremap;
	}

	if (res_irq) {
		ret = request_irq(res_irq->start, omap_wdt_interrupt, 0,
				  dev_name(&pdev->dev), wdev);

		if (ret)
			goto err_irq;

		wdev->irq = res_irq->start;
	}

	platform_set_drvdata(pdev, wdev);

	pm_runtime_enable(wdev->dev);
	pm_runtime_irq_safe(wdev->dev);
	pm_runtime_get_sync(wdev->dev);

	omap_wdt_disable(wdev);
	omap_wdt_adjust_timeout(timer_margin);

	wdev->omap_wdt_miscdev.parent = &pdev->dev;
	wdev->omap_wdt_miscdev.minor = WATCHDOG_MINOR;
	wdev->omap_wdt_miscdev.name = "watchdog";
	wdev->omap_wdt_miscdev.fops = &omap_wdt_fops;

	ret = misc_register(&(wdev->omap_wdt_miscdev));
	if (ret)
		goto err_misc;

	pr_info("OMAP Watchdog Timer Rev 0x%02x: initial timeout %d sec\n",
		__raw_readl(wdev->base + OMAP_WATCHDOG_REV) & 0xFF,
		timer_margin);

	pm_runtime_put_sync(wdev->dev);

	omap_wdt_dev = pdev;

/*	if (kernelpet && wdev->irq) {
		wdev->nb.notifier_call = omap_wdt_nb_func;
		atomic_notifier_chain_register(&touch_watchdog_notifier_head,
			&wdev->nb);
		omap_wdt_setup(wdev);
	} */

#ifdef CONFIG_OMAP_WATCHDOG_CONTROL
	for (i = 0; i < ARRAY_SIZE(wdt_attributes); i++) {
		ret = device_create_file(&pdev->dev, wdt_attributes[i]);
		if (ret != 0) {
			printk(KERN_ERR "Failed to create attr %d: %d\n",
				i, ret);
		}
	}

	if (!is_wdt_enabled) {
		disable_wdt(wdev);
		printk(KERN_WARNING "Disable omap watchdog\n");
	}
#endif
	return 0;

err_misc:
	platform_set_drvdata(pdev, NULL);

	if (wdev->irq)
		free_irq(wdev->irq, wdev);

err_irq:
	iounmap(wdev->base);

err_ioremap:
	wdev->base = NULL;
	kfree(wdev);

err_kzalloc:
	release_mem_region(res->start, resource_size(res));

err_busy:
err_get_resource:

	return ret;
}