*参照元 [#a91c5505]
#backlinks

*説明 [#a39d0300]
-パス: [[linux-4.4.1/drivers/pinctrl/core.c]]

-FIXME: これは何?
--説明


**引数 [#u9fe02d2]
-struct pinctrl_desc *pctldesc
--
--[[linux-4.4.1/pinctrl_desc]]
-struct device *dev
--
--[[linux-4.4.1/device]]
-void *driver_data
--


**返り値 [#he9118b7]
-struct pinctrl_dev *
--
--[[linux-4.4.1/pinctrl_dev]]


**参考 [#e895af3e]


*実装 [#of4cb504]
 /**
  * pinctrl_register() - register a pin controller device
  * @pctldesc: descriptor for this pin controller
  * @dev: parent device for this pin controller
  * @driver_data: private pin controller data for this pin controller
  */
 struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
                                     struct device *dev, void *driver_data)
 {
         struct pinctrl_dev *pctldev;
         int ret;
 
-
--[[linux-4.4.1/pinctrl_dev]]

         if (!pctldesc)
                 return ERR_PTR(-EINVAL);
         if (!pctldesc->name)
                 return ERR_PTR(-EINVAL);
 
-
--[[linux-4.4.1/ERR_PTR()]]

         pctldev = kzalloc(sizeof(*pctldev), GFP_KERNEL);
         if (pctldev == NULL) {
                 dev_err(dev, "failed to alloc struct pinctrl_dev\n");
                 return ERR_PTR(-ENOMEM);
         }
 
-
--[[linux-4.4.1/kzalloc()]]
--[[linux-4.4.1/dev_err()]]

         /* Initialize pin control device struct */
         pctldev->owner = pctldesc->owner;
         pctldev->desc = pctldesc;
         pctldev->driver_data = driver_data;
         INIT_RADIX_TREE(&pctldev->pin_desc_tree, GFP_KERNEL);
         INIT_LIST_HEAD(&pctldev->gpio_ranges);
         pctldev->dev = dev;
         mutex_init(&pctldev->mutex);
 
-
--[[linux-4.4.1/INIT_RADIX_TREE()]]
--[[linux-4.4.1/INIT_LIST_HEAD()]]
--[[linux-4.4.1/mutex_init()]]

         /* check core ops for sanity */
         ret = pinctrl_check_ops(pctldev);
         if (ret) {
                 dev_err(dev, "pinctrl ops lacks necessary functions\n");
                 goto out_err;
         }
 
-
--[[linux-4.4.1/pinctrl_check_ops()]]

         /* If we're implementing pinmuxing, check the ops for sanity */
         if (pctldesc->pmxops) {
                 ret = pinmux_check_ops(pctldev);
                 if (ret)
                         goto out_err;
         }
 
-
--[[linux-4.4.1/pinmux_check_ops()]]

         /* If we're implementing pinconfig, check the ops for sanity */
         if (pctldesc->confops) {
                 ret = pinconf_check_ops(pctldev);
                 if (ret)
                         goto out_err;
         }
 
-
--[[linux-4.4.1/pinconf_check_ops()]]

         /* Register all the pins */
         dev_dbg(dev, "try to register %d pins ...\n",  pctldesc->npins);
         ret = pinctrl_register_pins(pctldev, pctldesc->pins, pctldesc->npins);
         if (ret) {
                 dev_err(dev, "error during pin registration\n");
                 pinctrl_free_pindescs(pctldev, pctldesc->pins,
                                       pctldesc->npins);
                 goto out_err;
         }
 
-
--[[linux-4.4.1/dev_dbg()]]
--[[linux-4.4.1/pinctrl_register_pins()]]
--[[linux-4.4.1/pinctrl_free_pindescs()]]

         mutex_lock(&pinctrldev_list_mutex);
         list_add_tail(&pctldev->node, &pinctrldev_list);
         mutex_unlock(&pinctrldev_list_mutex);
 
-
--[[linux-4.4.1/mutex_lock()]]
--[[linux-4.4.1/pinctrldev_list_mutex(global)]]
--[[linux-4.4.1/list_add_tail()]]
--[[linux-4.4.1/pinctrldev_list(global)]]
--[[linux-4.4.1/mutex_unlock()]]

         pctldev->p = pinctrl_get(pctldev->dev);
 
-
--[[linux-4.4.1/pinctrl_get()]]

         if (!IS_ERR(pctldev->p)) {
-
--[[linux-4.4.1/IS_ERR()]]

                 pctldev->hog_default =
                         pinctrl_lookup_state(pctldev->p, PINCTRL_STATE_DEFAULT);
                 if (IS_ERR(pctldev->hog_default)) {
                         dev_dbg(dev, "failed to lookup the default state\n");
                 } else {
                         if (pinctrl_select_state(pctldev->p,
                                                 pctldev->hog_default))
                                 dev_err(dev,
                                         "failed to select default state\n");
                 }
 
-
--[[linux-4.4.1/pinctrl_lookup_state()]]
--[[linux-4.4.1/IS_ERR()]]
--[[linux-4.4.1/dev_dbg()]]
--[[linux-4.4.1/pinctrl_select_state()]]

                 pctldev->hog_sleep =
                         pinctrl_lookup_state(pctldev->p,
                                                     PINCTRL_STATE_SLEEP);
                 if (IS_ERR(pctldev->hog_sleep))
                         dev_dbg(dev, "failed to lookup the sleep state\n");
         }
 
         pinctrl_init_device_debugfs(pctldev);
 
-
--[[linux-4.4.1/pinctrl_init_device_debugfs()]]

         return pctldev;
 
 out_err:
         mutex_destroy(&pctldev->mutex);
         kfree(pctldev);
-
--[[linux-4.4.1/mutex_destroy()]]
--[[linux-4.4.1/kfree()]]

         return ERR_PTR(ret);
 }
 EXPORT_SYMBOL_GPL(pinctrl_register);
-
--[[linux-4.4.1/EXPORT_SYMBOL_GPL()]]


*コメント [#odd7ee6e]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS