pinmux.c 16.3 KB
Newer Older
1 2 3
/*
 * Core driver for the pin muxing portions of the pin control subsystem
 *
4
 * Copyright (C) 2011-2012 ST-Ericsson SA
5 6 7 8 9
 * Written on behalf of Linaro for ST-Ericsson
 * Based on bits of regulator core, gpio core and clk core
 *
 * Author: Linus Walleij <linus.walleij@linaro.org>
 *
10 11
 * Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved.
 *
12 13 14 15 16 17 18 19 20 21 22 23
 * License terms: GNU General Public License (GPL) version 2
 */
#define pr_fmt(fmt) "pinmux core: " fmt

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/slab.h>
#include <linux/radix-tree.h>
#include <linux/err.h>
#include <linux/list.h>
24
#include <linux/string.h>
25 26 27 28 29 30
#include <linux/sysfs.h>
#include <linux/debugfs.h>
#include <linux/seq_file.h>
#include <linux/pinctrl/machine.h>
#include <linux/pinctrl/pinmux.h>
#include "core.h"
31
#include "pinmux.h"
32

33 34 35
int pinmux_check_ops(struct pinctrl_dev *pctldev)
{
	const struct pinmux_ops *ops = pctldev->desc->pmxops;
36
	unsigned nfuncs;
37 38 39
	unsigned selector = 0;

	/* Check that we implement required operations */
40 41
	if (!ops ||
	    !ops->get_functions_count ||
42 43 44
	    !ops->get_function_name ||
	    !ops->get_function_groups ||
	    !ops->enable ||
45 46
	    !ops->disable) {
		dev_err(pctldev->dev, "pinmux ops lacks necessary functions\n");
47
		return -EINVAL;
48
	}
49
	/* Check that all functions registered have names */
50
	nfuncs = ops->get_functions_count(pctldev);
51
	while (selector < nfuncs) {
52 53 54
		const char *fname = ops->get_function_name(pctldev,
							   selector);
		if (!fname) {
55
			dev_err(pctldev->dev, "pinmux ops has no name for function%u\n",
56 57 58 59 60 61 62 63 64
				selector);
			return -EINVAL;
		}
		selector++;
	}

	return 0;
}

65 66 67 68 69 70 71 72 73 74 75
int pinmux_validate_map(struct pinctrl_map const *map, int i)
{
	if (!map->data.mux.function) {
		pr_err("failed to register map %s (%d): no function given\n",
		       map->name, i);
		return -EINVAL;
	}

	return 0;
}

76 77 78
/**
 * pin_request() - request a single pin to be muxed in, typically for GPIO
 * @pin: the pin number in the global pin space
79 80
 * @owner: a representation of the owner of this pin; typically the device
 *	name that controls its mux function, or the requested GPIO name
81 82 83 84
 * @gpio_range: the range matching the GPIO pin if this is a request for a
 *	single GPIO pin
 */
static int pin_request(struct pinctrl_dev *pctldev,
85
		       int pin, const char *owner,
86 87 88 89 90 91 92 93
		       struct pinctrl_gpio_range *gpio_range)
{
	struct pin_desc *desc;
	const struct pinmux_ops *ops = pctldev->desc->pmxops;
	int status = -EINVAL;

	desc = pin_desc_get(pctldev, pin);
	if (desc == NULL) {
94
		dev_err(pctldev->dev,
95 96 97 98
			"pin is not registered so it cannot be requested\n");
		goto out;
	}

99 100 101
	dev_dbg(pctldev->dev, "request pin %d (%s) for %s\n",
		pin, desc->name, owner);

102 103 104 105 106 107 108
	if (gpio_range) {
		/* There's no need to support multiple GPIO requests */
		if (desc->gpio_owner) {
			dev_err(pctldev->dev,
				"pin already requested\n");
			goto out;
		}
109

110 111 112 113 114 115 116
		desc->gpio_owner = owner;
	} else {
		if (desc->mux_usecount && strcmp(desc->mux_owner, owner)) {
			dev_err(pctldev->dev,
				"pin already requested\n");
			goto out;
		}
117

118 119 120 121 122 123
		desc->mux_usecount++;
		if (desc->mux_usecount > 1)
			return 0;

		desc->mux_owner = owner;
	}
124 125 126

	/* Let each pin increase references to this module */
	if (!try_module_get(pctldev->owner)) {
127
		dev_err(pctldev->dev,
128 129 130 131 132 133 134 135 136 137
			"could not increase module refcount for pin %d\n",
			pin);
		status = -EINVAL;
		goto out_free_pin;
	}

	/*
	 * If there is no kind of request function for the pin we just assume
	 * we got it by default and proceed.
	 */
138
	if (gpio_range && ops->gpio_request_enable)
139 140 141 142 143 144 145
		/* This requests and enables a single GPIO pin */
		status = ops->gpio_request_enable(pctldev, gpio_range, pin);
	else if (ops->request)
		status = ops->request(pctldev, pin);
	else
		status = 0;

146
	if (status) {
147
		dev_err(pctldev->dev, "request on device %s failed for pin %d\n",
148
		       pctldev->desc->name, pin);
149 150 151
		module_put(pctldev->owner);
	}

152
out_free_pin:
153
	if (status) {
154 155 156 157 158 159 160
		if (gpio_range) {
			desc->gpio_owner = NULL;
		} else {
			desc->mux_usecount--;
			if (!desc->mux_usecount)
				desc->mux_owner = NULL;
		}
161
	}
162 163
out:
	if (status)
164
		dev_err(pctldev->dev, "pin-%d (%s) status %d\n",
165
		       pin, owner, status);
166 167 168 169 170 171 172 173

	return status;
}

/**
 * pin_free() - release a single muxed in pin so something else can be muxed
 * @pctldev: pin controller device handling this pin
 * @pin: the pin to free
174 175
 * @gpio_range: the range matching the GPIO pin if this is a request for a
 *	single GPIO pin
L
Linus Walleij 已提交
176
 *
177 178
 * This function returns a pointer to the previous owner. This is used
 * for callers that dynamically allocate an owner name so it can be freed
L
Linus Walleij 已提交
179
 * once the pin is free. This is done for GPIO request functions.
180
 */
181 182
static const char *pin_free(struct pinctrl_dev *pctldev, int pin,
			    struct pinctrl_gpio_range *gpio_range)
183 184 185
{
	const struct pinmux_ops *ops = pctldev->desc->pmxops;
	struct pin_desc *desc;
186
	const char *owner;
187 188 189

	desc = pin_desc_get(pctldev, pin);
	if (desc == NULL) {
190
		dev_err(pctldev->dev,
191
			"pin is not registered so it cannot be freed\n");
192
		return NULL;
193 194
	}

195 196 197 198 199
	if (!gpio_range) {
		desc->mux_usecount--;
		if (desc->mux_usecount)
			return NULL;
	}
200

201 202 203 204 205 206 207
	/*
	 * If there is no kind of request function for the pin we just assume
	 * we got it by default and proceed.
	 */
	if (gpio_range && ops->gpio_disable_free)
		ops->gpio_disable_free(pctldev, gpio_range, pin);
	else if (ops->free)
208 209
		ops->free(pctldev, pin);

210 211 212 213 214 215 216 217 218
	if (gpio_range) {
		owner = desc->gpio_owner;
		desc->gpio_owner = NULL;
	} else {
		owner = desc->mux_owner;
		desc->mux_owner = NULL;
		desc->mux_setting = NULL;
	}

219
	module_put(pctldev->owner);
220

221
	return owner;
222 223 224
}

/**
225 226 227 228
 * pinmux_request_gpio() - request pinmuxing for a GPIO pin
 * @pctldev: pin controller device affected
 * @pin: the pin to mux in for GPIO
 * @range: the applicable GPIO range
229
 */
230 231 232
int pinmux_request_gpio(struct pinctrl_dev *pctldev,
			struct pinctrl_gpio_range *range,
			unsigned pin, unsigned gpio)
233 234
{
	char gpiostr[16];
235
	const char *owner;
236 237 238 239 240
	int ret;

	/* Conjure some name stating what chip and pin this is taken by */
	snprintf(gpiostr, 15, "%s:%d", range->name, gpio);

241 242
	owner = kstrdup(gpiostr, GFP_KERNEL);
	if (!owner)
243 244
		return -EINVAL;

245
	ret = pin_request(pctldev, pin, owner, range);
246
	if (ret < 0)
247
		kfree(owner);
248 249

	return ret;
250 251 252
}

/**
253 254 255 256
 * pinmux_free_gpio() - release a pin from GPIO muxing
 * @pctldev: the pin controller device for the pin
 * @pin: the affected currently GPIO-muxed in pin
 * @range: applicable GPIO range
257
 */
258 259
void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin,
		      struct pinctrl_gpio_range *range)
260
{
261
	const char *owner;
262

263 264
	owner = pin_free(pctldev, pin, range);
	kfree(owner);
265 266
}

267 268 269 270 271 272 273 274 275 276
/**
 * pinmux_gpio_direction() - set the direction of a single muxed-in GPIO pin
 * @pctldev: the pin controller handling this pin
 * @range: applicable GPIO range
 * @pin: the affected GPIO pin in this controller
 * @input: true if we set the pin as input, false for output
 */
int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
			  struct pinctrl_gpio_range *range,
			  unsigned pin, bool input)
277 278 279 280 281 282 283 284 285 286 287 288 289 290
{
	const struct pinmux_ops *ops;
	int ret;

	ops = pctldev->desc->pmxops;

	if (ops->gpio_set_direction)
		ret = ops->gpio_set_direction(pctldev, range, pin, input);
	else
		ret = 0;

	return ret;
}

291 292
static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev,
					const char *function)
293 294
{
	const struct pinmux_ops *ops = pctldev->desc->pmxops;
295
	unsigned nfuncs = ops->get_functions_count(pctldev);
296 297 298
	unsigned selector = 0;

	/* See if this pctldev has this function */
299
	while (selector < nfuncs) {
300 301 302
		const char *fname = ops->get_function_name(pctldev,
							   selector);

303 304
		if (!strcmp(function, fname))
			return selector;
305 306 307 308 309

		selector++;
	}

	pr_err("%s does not support function %s\n",
310
	       pinctrl_dev_get_name(pctldev), function);
311 312 313
	return -EINVAL;
}

314 315
int pinmux_map_to_setting(struct pinctrl_map const *map,
			  struct pinctrl_setting *setting)
316
{
317 318 319 320 321
	struct pinctrl_dev *pctldev = setting->pctldev;
	const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
	const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
	char const * const *groups;
	unsigned num_groups;
322
	int ret;
323 324 325 326
	const char *group;
	int i;
	const unsigned *pins;
	unsigned num_pins;
327

328 329 330 331 332
	if (!pmxops) {
		dev_err(pctldev->dev, "does not support mux function\n");
		return -EINVAL;
	}

333
	ret = pinmux_func_name_to_selector(pctldev, map->data.mux.function);
334 335 336
	if (ret < 0) {
		dev_err(pctldev->dev, "invalid function %s in map table\n",
			map->data.mux.function);
337
		return ret;
338
	}
339
	setting->data.mux.func = ret;
340

341
	ret = pmxops->get_function_groups(pctldev, setting->data.mux.func,
342
					  &groups, &num_groups);
343 344 345
	if (ret < 0) {
		dev_err(pctldev->dev, "can't query groups for function %s\n",
			map->data.mux.function);
346
		return ret;
347 348 349 350 351
	}
	if (!num_groups) {
		dev_err(pctldev->dev,
			"function %s can't be selected on any group\n",
			map->data.mux.function);
352
		return -EINVAL;
353
	}
354
	if (map->data.mux.group) {
355
		bool found = false;
356
		group = map->data.mux.group;
357 358 359 360 361 362
		for (i = 0; i < num_groups; i++) {
			if (!strcmp(group, groups[i])) {
				found = true;
				break;
			}
		}
363 364 365 366
		if (!found) {
			dev_err(pctldev->dev,
				"invalid group \"%s\" for function \"%s\"\n",
				group, map->data.mux.function);
367
			return -EINVAL;
368
		}
369 370
	} else {
		group = groups[0];
371 372
	}

373
	ret = pinctrl_get_group_selector(pctldev, group);
374 375 376
	if (ret < 0) {
		dev_err(pctldev->dev, "invalid group %s in map table\n",
			map->data.mux.group);
377
		return ret;
378
	}
379
	setting->data.mux.group = ret;
380

381 382
	ret = pctlops->get_group_pins(pctldev, setting->data.mux.group, &pins,
				      &num_pins);
383
	if (ret) {
384 385
		dev_err(pctldev->dev,
			"could not get pins for device %s group selector %d\n",
386
			pinctrl_dev_get_name(pctldev), setting->data.mux.group);
387 388 389 390 391 392 393 394
			return -ENODEV;
	}

	/* Try to allocate all pins in this group, one by one */
	for (i = 0; i < num_pins; i++) {
		ret = pin_request(pctldev, pins[i], map->dev_name, NULL);
		if (ret) {
			dev_err(pctldev->dev,
395
				"could not request pin %d on device %s\n",
396 397 398 399 400 401 402
				pins[i], pinctrl_dev_get_name(pctldev));
			/* On error release all taken pins */
			i--; /* this pin just failed */
			for (; i >= 0; i--)
				pin_free(pctldev, pins[i], NULL);
			return -ENODEV;
		}
403 404 405 406 407
	}

	return 0;
}

408
void pinmux_free_setting(struct pinctrl_setting const *setting)
409
{
410 411 412 413
	struct pinctrl_dev *pctldev = setting->pctldev;
	const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
	const unsigned *pins;
	unsigned num_pins;
414
	int ret;
415
	int i;
416

417
	ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
418
				      &pins, &num_pins);
419
	if (ret) {
420 421
		dev_err(pctldev->dev,
			"could not get pins for device %s group selector %d\n",
422
			pinctrl_dev_get_name(pctldev), setting->data.mux.group);
423
		return;
424 425
	}

426 427
	for (i = 0; i < num_pins; i++)
		pin_free(pctldev, pins[i], NULL);
428 429
}

430
int pinmux_enable_setting(struct pinctrl_setting const *setting)
431
{
432
	struct pinctrl_dev *pctldev = setting->pctldev;
433
	const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
434
	const struct pinmux_ops *ops = pctldev->desc->pmxops;
435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460
	int ret;
	const unsigned *pins;
	unsigned num_pins;
	int i;
	struct pin_desc *desc;

	ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
				      &pins, &num_pins);
	if (ret) {
		/* errors only affect debug data, so just warn */
		dev_warn(pctldev->dev,
			 "could not get pins for group selector %d\n",
			 setting->data.mux.group);
		num_pins = 0;
	}

	for (i = 0; i < num_pins; i++) {
		desc = pin_desc_get(pctldev, pins[i]);
		if (desc == NULL) {
			dev_warn(pctldev->dev,
				 "could not get pin desc for pin %d\n",
				 pins[i]);
			continue;
		}
		desc->mux_setting = &(setting->data.mux);
	}
461

462 463
	return ops->enable(pctldev, setting->data.mux.func,
			   setting->data.mux.group);
464 465
}

466
void pinmux_disable_setting(struct pinctrl_setting const *setting)
467
{
468
	struct pinctrl_dev *pctldev = setting->pctldev;
469
	const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
470
	const struct pinmux_ops *ops = pctldev->desc->pmxops;
471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496
	int ret;
	const unsigned *pins;
	unsigned num_pins;
	int i;
	struct pin_desc *desc;

	ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
				      &pins, &num_pins);
	if (ret) {
		/* errors only affect debug data, so just warn */
		dev_warn(pctldev->dev,
			 "could not get pins for group selector %d\n",
			 setting->data.mux.group);
		num_pins = 0;
	}

	for (i = 0; i < num_pins; i++) {
		desc = pin_desc_get(pctldev, pins[i]);
		if (desc == NULL) {
			dev_warn(pctldev->dev,
				 "could not get pin desc for pin %d\n",
				 pins[i]);
			continue;
		}
		desc->mux_setting = NULL;
	}
497

498
	ops->disable(pctldev, setting->data.mux.func, setting->data.mux.group);
499 500 501 502 503 504 505 506 507
}

#ifdef CONFIG_DEBUG_FS

/* Called from pincontrol core */
static int pinmux_functions_show(struct seq_file *s, void *what)
{
	struct pinctrl_dev *pctldev = s->private;
	const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
508
	unsigned nfuncs;
509 510
	unsigned func_selector = 0;

511 512
	if (!pmxops)
		return 0;
513

514 515
	mutex_lock(&pinctrl_mutex);
	nfuncs = pmxops->get_functions_count(pctldev);
516
	while (func_selector < nfuncs) {
517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537
		const char *func = pmxops->get_function_name(pctldev,
							  func_selector);
		const char * const *groups;
		unsigned num_groups;
		int ret;
		int i;

		ret = pmxops->get_function_groups(pctldev, func_selector,
						  &groups, &num_groups);
		if (ret)
			seq_printf(s, "function %s: COULD NOT GET GROUPS\n",
				   func);

		seq_printf(s, "function: %s, groups = [ ", func);
		for (i = 0; i < num_groups; i++)
			seq_printf(s, "%s ", groups[i]);
		seq_puts(s, "]\n");

		func_selector++;
	}

538 539
	mutex_unlock(&pinctrl_mutex);

540 541 542 543 544 545
	return 0;
}

static int pinmux_pins_show(struct seq_file *s, void *what)
{
	struct pinctrl_dev *pctldev = s->private;
546 547
	const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
	const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
548
	unsigned i, pin;
549

550 551 552
	if (!pmxops)
		return 0;

553
	seq_puts(s, "Pinmux settings per pin\n");
554
	seq_puts(s, "Format: pin (name): mux_owner gpio_owner hog?\n");
555

556 557
	mutex_lock(&pinctrl_mutex);

558 559
	/* The pin number can be retrived from the pin controller descriptor */
	for (i = 0; i < pctldev->desc->npins; i++) {
560
		struct pin_desc *desc;
561
		bool is_hog = false;
562

563
		pin = pctldev->desc->pins[i].number;
564
		desc = pin_desc_get(pctldev, pin);
565
		/* Skip if we cannot search the pin */
566 567 568
		if (desc == NULL)
			continue;

569 570
		if (desc->mux_owner &&
		    !strcmp(desc->mux_owner, pinctrl_dev_get_name(pctldev)))
571 572
			is_hog = true;

573
		seq_printf(s, "pin %d (%s): %s %s%s", pin,
574
			   desc->name ? desc->name : "unnamed",
575 576 577 578
			   desc->mux_owner ? desc->mux_owner
				: "(MUX UNCLAIMED)",
			   desc->gpio_owner ? desc->gpio_owner
				: "(GPIO UNCLAIMED)",
579
			   is_hog ? " (HOG)" : "");
580 581 582 583 584 585 586 587 588

		if (desc->mux_setting)
			seq_printf(s, " function %s group %s\n",
				   pmxops->get_function_name(pctldev,
					desc->mux_setting->func),
				   pctlops->get_group_name(pctldev,
					desc->mux_setting->group));
		else
			seq_printf(s, "\n");
589 590
	}

591 592
	mutex_unlock(&pinctrl_mutex);

593 594 595
	return 0;
}

596 597 598 599 600 601 602 603 604
void pinmux_show_map(struct seq_file *s, struct pinctrl_map const *map)
{
	seq_printf(s, "group %s\nfunction %s\n",
		map->data.mux.group ? map->data.mux.group : "(default)",
		map->data.mux.function);
}

void pinmux_show_setting(struct seq_file *s,
			 struct pinctrl_setting const *setting)
605
{
606 607 608 609
	struct pinctrl_dev *pctldev = setting->pctldev;
	const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
	const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;

610 611 612 613 614
	seq_printf(s, "group: %s (%u) function: %s (%u)\n",
		   pctlops->get_group_name(pctldev, setting->data.mux.group),
		   setting->data.mux.group,
		   pmxops->get_function_name(pctldev, setting->data.mux.func),
		   setting->data.mux.func);
615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650
}

static int pinmux_functions_open(struct inode *inode, struct file *file)
{
	return single_open(file, pinmux_functions_show, inode->i_private);
}

static int pinmux_pins_open(struct inode *inode, struct file *file)
{
	return single_open(file, pinmux_pins_show, inode->i_private);
}

static const struct file_operations pinmux_functions_ops = {
	.open		= pinmux_functions_open,
	.read		= seq_read,
	.llseek		= seq_lseek,
	.release	= single_release,
};

static const struct file_operations pinmux_pins_ops = {
	.open		= pinmux_pins_open,
	.read		= seq_read,
	.llseek		= seq_lseek,
	.release	= single_release,
};

void pinmux_init_device_debugfs(struct dentry *devroot,
			 struct pinctrl_dev *pctldev)
{
	debugfs_create_file("pinmux-functions", S_IFREG | S_IRUGO,
			    devroot, pctldev, &pinmux_functions_ops);
	debugfs_create_file("pinmux-pins", S_IFREG | S_IRUGO,
			    devroot, pctldev, &pinmux_pins_ops);
}

#endif /* CONFIG_DEBUG_FS */