/*
 * Copyright 2012 ST-Ericsson
 *
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 or later at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */
#include <dt-bindings/pinctrl/nomadik.h>

/ {
	in_nopull: in_nopull {
		ste,input = <INPUT_NOPULL>;
	};

	in_pu: input_pull_up {
		ste,input = <INPUT_PULLUP>;
	};

	in_pd: input_pull_down {
		ste,input = <INPUT_PULLDOWN>;
	};

	out_hi: output_high {
		ste,output = <OUTPUT_HIGH>;
	};

	out_lo: output_low {
		ste,output = <OUTPUT_LOW>;
	};

	gpio_out_lo: gpio_output_low {
		ste,gpio = <GPIOMODE_ENABLED>;
		ste,output = <OUTPUT_LOW>;
	};

	slpm_in_pu: slpm_in_pu {
		ste,sleep = <SLPM_ENABLED>;
		ste,sleep-input = <SLPM_INPUT_PULLUP>;
		ste,sleep-wakeup = <SLPM_WAKEUP_ENABLE>;
	};

	slpm_in_wkup_pdis: slpm_in_wkup_pdis {
		ste,sleep = <SLPM_ENABLED>;
		ste,sleep-input = <SLPM_DIR_INPUT>;
		ste,sleep-wakeup = <SLPM_WAKEUP_ENABLE>;
		ste,sleep-pull-disable = <SLPM_PDIS_DISABLED>;
	};

	slpm_out_lo: slpm_out_lo {
		ste,sleep = <SLPM_ENABLED>;
		ste,sleep-output = <SLPM_OUTPUT_LOW>;
		ste,sleep-wakeup = <SLPM_WAKEUP_ENABLE>;
	};

	slpm_out_hi: slpm_out_hi {
		ste,sleep = <SLPM_ENABLED>;
		ste,sleep-output = <SLPM_OUTPUT_HIGH>;
		ste,sleep-wakeup = <SLPM_WAKEUP_ENABLE>;
	};

	slpm_out_hi_wkup_pdis: slpm_out_hi_wkup_pdis {
		ste,sleep = <SLPM_ENABLED>;
		ste,sleep-output = <SLPM_OUTPUT_HIGH>;
		ste,sleep-wakeup = <SLPM_WAKEUP_ENABLE>;
		ste,sleep-pull-disable = <SLPM_PDIS_DISABLED>;
	};

	slpm_out_wkup_pdis: slpm_out_wkup_pdis {
		ste,sleep = <SLPM_ENABLED>;
		ste,sleep-output = <SLPM_DIR_OUTPUT>;
		ste,sleep-wakeup = <SLPM_WAKEUP_ENABLE>;
		ste,sleep-pull-disable = <SLPM_PDIS_DISABLED>;
	};

	in_wkup_pdis: in_wkup_pdis {
		ste,sleep-input = <SLPM_DIR_INPUT>;
		ste,sleep-wakeup = <SLPM_WAKEUP_ENABLE>;
		ste,sleep-pull-disable = <SLPM_PDIS_DISABLED>;
	};

	out_hi_wkup_pdis: out_hi_wkup_pdis {
		ste,sleep-output = <SLPM_OUTPUT_HIGH>;
		ste,sleep-wakeup = <SLPM_WAKEUP_ENABLE>;
		ste,sleep-pull-disable = <SLPM_PDIS_DISABLED>;
	};

	out_wkup_pdis: out_wkup_pdis {
		ste,sleep-output = <SLPM_DIR_OUTPUT>;
		ste,sleep-wakeup = <SLPM_WAKEUP_ENABLE>;
		ste,sleep-pull-disable = <SLPM_PDIS_DISABLED>;
	};
};
