All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Hilman <khilman@deeprootsystems.com>
To: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
Cc: linux-omap@vger.kernel.org
Subject: Re: [PATCH] Debobs and ETK padconf implementation
Date: Thu, 25 Sep 2008 11:56:22 +0300	[thread overview]
Message-ID: <87ej38ob7t.fsf@deeprootsystems.com> (raw)
In-Reply-To: <1221663749-26121-3-git-send-email-peter.de-schrijver@nokia.com> (Peter De Schrijver's message of "Wed\, 17 Sep 2008 18\:02\:28 +0300")

"Peter 'p2' De Schrijver" <peter.de-schrijver@nokia.com> writes:

> Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
> ---
>  arch/arm/mach-omap2/debobs.c |  214 ++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 214 insertions(+), 0 deletions(-)
>  create mode 100644 arch/arm/mach-omap2/debobs.c
>
> diff --git a/arch/arm/mach-omap2/debobs.c b/arch/arm/mach-omap2/debobs.c
> new file mode 100644
> index 0000000..1bde1f4
> --- /dev/null
> +++ b/arch/arm/mach-omap2/debobs.c
> @@ -0,0 +1,214 @@
> +/*
> + * arch/arm/mach-omap2/debobs.c
> + *
> + * Handle debobs pads
> + *
> + * Copyright (C) 2008 Nokia Corporation
> + *
> + * Written by Peter De Schrijver <peter.de-schrijver@nokia.com>
> + *
> + * This file is subject to the terms and conditions of the GNU General
> + * Public License. See the file "COPYING" in the main directory of this
> + * archive for more details.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
> + */
> +
> +
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +#include <linux/debugfs.h>
> +#include <linux/uaccess.h>
> +#include <linux/module.h>
> +#include <mach/control.h>
> +#include <mach/mux.h>
> +#include <mach/gpio.h>
> +#include <mach/board.h>
> +
> +#define ETK_GPIO_BEGIN		12
> +#define ETK_GPIO(i)		(ETK_GPIO_BEGIN + i)
> +#define NUM_OF_DEBOBS_PADS	18
> +
> +enum debobs_pad_mode {
> +	GPIO = 0,
> +	OBS = 1,
> +	ETK = 2,
> +	NO_MODE = 3,
> +};
> +
> +static char *debobs_pad_mode_names[] = {
> +	[GPIO] = "GPIO",
> +	[OBS] = "OBS",
> +	[ETK] = "ETK",
> +};
> +
> +struct obs {
> +	u16 offset;
> +	u8 value;
> +	u8 mask;
> +};
> +
> +struct debobs_pad {
> +	enum debobs_pad_mode mode;
> +	struct obs core_obs;
> +	struct obs wakeup_obs;
> +};
> +
> +static struct debobs_pad debobs_pads[NUM_OF_DEBOBS_PADS];
> +
> +static int debobs_mode_open(struct inode *inode, struct file *file)
> +{
> +	file->private_data = inode->i_private;
> +
> +	return 0;
> +}
> +
> +static ssize_t debobs_mode_read(struct file *file, char __user *user_buf,
> +				size_t count, loff_t *ppos)
> +{
> +	char buffer[10];
> +	int size;
> +	int pad_number = (int)file->private_data;
> +	struct debobs_pad *e = &debobs_pads[pad_number];
> +
> +	size = snprintf(buffer, sizeof(buffer), "%s\n",
> +			debobs_pad_mode_names[e->mode]);
> +	return simple_read_from_buffer(user_buf, count, ppos, buffer, size);
> +}
> +
> +static ssize_t debobs_mode_write(struct file *file, const char __user *user_buf,
> +				size_t count, loff_t *ppos)
> +{
> +	char buffer[10];
> +	int buf_size, i, pad_number;
> +	u16 muxmode = OMAP34XX_MUX_MODE7;
> +
> +	memset(buffer, 0, sizeof(buffer));
> +	buf_size = min(count, (sizeof(buffer)-1));
> +
> +	if (copy_from_user(buffer, user_buf, buf_size))
> +		return -EFAULT;
> +
> +	pad_number = (int)file->private_data;
> +
> +	for (i = 0; i < NO_MODE; i++) {
> +		if (!strnicmp(debobs_pad_mode_names[i],
> +				buffer,
> +				strlen(debobs_pad_mode_names[i]))) {
> +			switch (i) {
> +			case ETK:
> +				muxmode = OMAP34XX_MUX_MODE0;
> +				break;
> +			case GPIO:
> +				muxmode = OMAP34XX_MUX_MODE4;
> +				break;
> +			case OBS:
> +				muxmode = OMAP34XX_MUX_MODE7;
> +				break;
> +			}
> +			omap_ctrl_writew(muxmode,
> +					OMAP343X_PADCONF_ETK(pad_number));
> +			debobs_pads[pad_number].mode = i;
> +
> +			return count;
> +		}
> +	}
> +
> +	return -EINVAL;
> +}
> +
> +static const struct file_operations debobs_mode_fops = {
> +	.open 	= debobs_mode_open,
> +	.read	= debobs_mode_read,
> +	.write	= debobs_mode_write,
> +};
> +
> +static int debobs_get(void *data, u64 *val)
> +{
> +	struct obs *o = data;
> +
> +	*val = o->value;
> +
> +	return 0;
> +}
> +
> +static int debobs_set(void *data, u64 val)
> +{
> +	struct obs *o = data;
> +
> +	val &= BIT(o->mask) - 1;
> +
> +	omap_ctrl_writeb(val, o->offset);
> +	o->value = val;
> +
> +	return 0;
> +}
> +
> +DEFINE_SIMPLE_ATTRIBUTE(debobs_fops, debobs_get, debobs_set, "%llu\n");
> +
> +static inline int __init _new_debobs_pad(struct debobs_pad *pad, char *name,
> +					int number, struct dentry *root)
> +{
> +	struct dentry *d;
> +	struct obs *o;
> +
> +	d = debugfs_create_dir(name, root);
> +	if (IS_ERR(d))
> +		return PTR_ERR(d);
> +
> +	omap_ctrl_writew(OMAP34XX_MUX_MODE4, OMAP343X_PADCONF_ETK(number));
> +	omap_set_gpio_direction(ETK_GPIO(number), 1);
> +	gpio_export(ETK_GPIO(number), 1);
> +	(void) debugfs_create_file("mode", S_IRUGO | S_IWUGO, d,
> +					(void *)number, &debobs_mode_fops);
> +
> +	o = &pad->core_obs;
> +	o->offset = OMAP343X_CONTROL_DEBOBS(number);
> +	o->value = omap_ctrl_readw(o->offset);
> +	o->mask = 7;
> +	(void) debugfs_create_file("coreobs", S_IRUGO | S_IWUGO, d, o,
> +					&debobs_fops);
> +
> +	o = &pad->wakeup_obs;
> +	o->offset = OMAP343X_CONTROL_WKUP_DEBOBSMUX(number);
> +	o->value = omap_ctrl_readb(o->offset);
> +	o->mask = 5;
> +	(void) debugfs_create_file("wakeupobs", S_IRUGO | S_IWUGO, d, o,
> +					&debobs_fops);
> +
> +	return 0;
> +}
> +
> +static int __init init_debobs(void)
> +{
> +	struct dentry *debobs_root;
> +	int i, err;
> +	char name[10];
> +
> +	debobs_root = debugfs_create_dir("debobs", NULL);
> +	if (IS_ERR(debobs_root))
> +		return PTR_ERR(debobs_root);
> +
> +	for (i = 0; i < NUM_OF_DEBOBS_PADS; i++) {
> +		if (!omap_request_gpio(ETK_GPIO(i))) {

The cross-platform gpiolib calls should be used here.

> +			snprintf(name, sizeof(name), "hw_dbg%d", i);
> +			err = _new_debobs_pad(&debobs_pads[i], name, i,
> +						debobs_root);
> +			if (err) {
> +				omap_free_gpio(ETK_GPIO(i));
> +				return err;
> +			}
> +		}
> +	}

In the successful case, future calls to gpio_request() to use these
lines will fail, since the line is reserved by the omap_request_gpio()
call.

> +	return 0;
> +}
> +
> +late_initcall_sync(init_debobs);
> -- 
> 1.5.6.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2008-09-25  8:56 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-17 15:02 [PATCH] debobs support for OMAP3430 Peter 'p2' De Schrijver
2008-09-17 15:02 ` [PATCH] Add definitions for ETK pads and debobs registers Peter 'p2' De Schrijver
2008-09-17 15:02   ` [PATCH] Debobs and ETK padconf implementation Peter 'p2' De Schrijver
2008-09-17 15:02     ` [PATCH] Add debobs Kconfig item Peter 'p2' De Schrijver
2008-09-25  8:58       ` Kevin Hilman
2008-09-25  8:56     ` Kevin Hilman [this message]
2008-09-25 11:35       ` [PATCH] Debobs and ETK padconf implementation Peter 'p2' De Schrijver
2008-09-25 11:40         ` Kevin Hilman
2008-09-25 11:52           ` Peter 'p2' De Schrijver
2008-09-25 12:06             ` Peter 'p2' De Schrijver
2008-09-25 12:31             ` Kevin Hilman
2008-09-25 17:04               ` David Brownell
2008-09-25 20:28                 ` Kevin Hilman
2008-09-25 20:37                   ` David Brownell
  -- strict thread matches above, loose matches on Subject: below --
2008-09-16  9:51 [PATCH] debobs support for OMAP3430 Peter 'p2' De Schrijver
2008-09-16  9:51 ` [PATCH] Add definitions for ETK pads and debobs registers Peter 'p2' De Schrijver
2008-09-16  9:51   ` [PATCH] Debobs and ETK padconf implementation Peter 'p2' De Schrijver

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ej38ob7t.fsf@deeprootsystems.com \
    --to=khilman@deeprootsystems.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=peter.de-schrijver@nokia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.