/*
 * drivers/base/interface.c - common driverfs interface that's exported to 
 * 	the world for all devices.
 *
 * Copyright (c) 2002-3 Patrick Mochel
 * Copyright (c) 2002-3 Open Source Development Labs
 * 
 * This file is released under the GPLv2
 *
 */

#include <linux/device.h>
#include <linux/err.h>
#include <linux/stat.h>
#include <linux/string.h>

/**
 *	detach_state - control the default power state for the device.
 *	
 *	This is the state the device enters when it's driver module is 
 *	unloaded. The value is an unsigned integer, in the range of 0-4.
 *	'0' indicates 'On', so no action will be taken when the driver is
 *	unloaded. This is the default behavior.
 *	'4' indicates 'Off', meaning the driver core will call the driver's
 *	shutdown method to quiesce the device.
 *	1-3 indicate a low-power state for the device to enter via the 
 *	driver's suspend method. 
 */

static ssize_t detach_show(struct device * dev, char * buf)
{
	return sprintf(buf,"%u\n",dev->detach_state);
}

static ssize_t detach_store(struct device * dev, const char * buf, size_t n)
{
	u32 state;
	state = simple_strtoul(buf,NULL,10);
	if (state > 4)
		return -EINVAL;
	dev->detach_state = state;
	return n;
}

static DEVICE_ATTR(detach_state,0644,detach_show,detach_store);


struct attribute * dev_default_attrs[] = {
	&dev_attr_detach_state.attr,
	NULL,
};