Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759292AbYBOOVa (ORCPT ); Fri, 15 Feb 2008 09:21:30 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1759647AbYBOOUW (ORCPT ); Fri, 15 Feb 2008 09:20:22 -0500 Received: from opensource.wolfsonmicro.com ([80.75.67.52]:42681 "EHLO opensource2.wolfsonmicro.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756384AbYBOOUS (ORCPT ); Fri, 15 Feb 2008 09:20:18 -0500 Subject: [PATCH 3/4] Voltage and current regulator framework From: Liam Girdwood To: Andrew Morton Cc: linux-kernel , linux-arm-kernel , Mark Brown Content-Type: text/plain Date: Fri, 15 Feb 2008 14:12:53 +0000 Message-Id: <1203084773.3466.216.camel@localhost.localdomain> Mime-Version: 1.0 X-Mailer: Evolution 2.8.3 (2.8.3-2.fc6) Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3771 Lines: 119 Platform interface :- diff --git a/include/linux/regulator/regulator-platform.h b/include/linux/regulator/regulator-platform.h new file mode 100644 index 0000000..5558630 --- /dev/null +++ b/include/linux/regulator/regulator-platform.h @@ -0,0 +1,104 @@ +/* + * regulator-platform.h -- SoC Regulator support, platform driver API. + * + * Copyright (C) 2007, 2008 Wolfson Microelectronics PLC. + * + * Author: Liam Girdwood + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Regulator Platform Interface. + */ + + +#ifndef __LINUX_REGULATOR_PLATFORM_H_ +#define __LINUX_REGULATOR_PLATFORM_H_ + +#include + +struct regulator; + +/* + * Regulator operation constraint flags. These flags are used to enable + * certain regulator operations. + * + * @VOLTAGE: Regulator output voltage can be changed by software on this + * board/machine. + * @CURRENT: Regulator output current can be changed by software on this + * board machine. + * @MODE: Regulator operating mode can be changed by software on this + * board machine. + * @STATUS: Regulator can be enabled and disabled. + * @DRMS: Dynamic Regulator Mode Switching is enabled for this regulator. + */ + +#define REGULATOR_CHANGE_VOLTAGE 0x1 +#define REGULATOR_CHANGE_CURRENT 0x2 +#define REGULATOR_CHANGE_MODE 0x4 +#define REGULATOR_CHANGE_STATUS 0x8 +#define REGULATOR_CHANGE_DRMS 0x10 + +/** + * struct regulation_constraints - regulator operating constraints. + * + * This struct describes regulator and board/machine specific constraints. + */ +struct regulation_constraints { + + char *name; + + /* voltage output range - for voltage control */ + int min_uV; + int max_uV; + + /* current output range - for current control */ + int min_uA; + int max_uA; + + /* valid regulator operating modes for this machine */ + unsigned int valid_modes_mask; + + /* valid operations for regulator on this machine */ + unsigned int valid_ops_mask; + + /* input voltage */ + int input_uV; +}; + +/** + * regulator_set_platform_source - set regulator source regulator + * @regulator: regulator source + * @parent: source or parent regulator + * + * Called by platform initialisation code to set the source supply or "parent" + * regulator for this regulator. This ensures that a regulator source will + * also be enabled by the core if it's child is enabled. + */ +int regulator_set_platform_source(const char *regulator_source, + const char *regulator_parent); + +/** + * regulator_get_platform_source - get regulator source regulator + * @regulator: regulator source + * + * Returns the regulator supply regulator or NULL if no supply regulator + * exists (i.e the regulator is supplied directly from USB, Line, Battery, etc) + */ +const char *regulator_get_platform_source(const char *regulator_name); + + +/** + * regulator_set_platform_constraints - sets regulator constraints + * @regulator: regulator source + * + * Allows platform initialisation code to define and constrain regulator + * circuits e.g. valid voltage/current ranges, etc. + * NOTE: Constraints *must* be set by platform code in order for some + * regulator operations to proceed i.e. set_voltage, set_current, set_mode. + */ +int regulator_set_platform_constraints(const char *regulator_name, + struct regulation_constraints *constraints); + +#endif -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/