Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.12 64 lines 1.8 kB view raw
1/* 2 * OF helpers for External connector (extcon) framework 3 * 4 * Copyright (C) 2013 Texas Instruments, Inc. 5 * Kishon Vijay Abraham I <kishon@ti.com> 6 * 7 * Copyright (C) 2013 Samsung Electronics 8 * Chanwoo Choi <cw00.choi@samsung.com> 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 */ 15 16#include <linux/module.h> 17#include <linux/slab.h> 18#include <linux/err.h> 19#include <linux/extcon.h> 20#include <linux/of.h> 21#include <linux/of_platform.h> 22#include <linux/extcon/of_extcon.h> 23 24/* 25 * of_extcon_get_extcon_dev - Get the name of extcon device from devicetree 26 * @dev - instance to the given device 27 * @index - index into list of extcon_dev 28 * 29 * return the instance of extcon device 30 */ 31struct extcon_dev *of_extcon_get_extcon_dev(struct device *dev, int index) 32{ 33 struct device_node *node; 34 struct extcon_dev *edev; 35 struct platform_device *extcon_parent_dev; 36 37 if (!dev->of_node) { 38 dev_dbg(dev, "device does not have a device node entry\n"); 39 return ERR_PTR(-EINVAL); 40 } 41 42 node = of_parse_phandle(dev->of_node, "extcon", index); 43 if (!node) { 44 dev_dbg(dev, "failed to get phandle in %s node\n", 45 dev->of_node->full_name); 46 return ERR_PTR(-ENODEV); 47 } 48 49 extcon_parent_dev = of_find_device_by_node(node); 50 if (!extcon_parent_dev) { 51 dev_dbg(dev, "unable to find device by node\n"); 52 return ERR_PTR(-EPROBE_DEFER); 53 } 54 55 edev = extcon_get_extcon_dev(dev_name(&extcon_parent_dev->dev)); 56 if (!edev) { 57 dev_dbg(dev, "unable to get extcon device : %s\n", 58 dev_name(&extcon_parent_dev->dev)); 59 return ERR_PTR(-ENODEV); 60 } 61 62 return edev; 63} 64EXPORT_SYMBOL_GPL(of_extcon_get_extcon_dev);