takahashi_stepone 2022年8月4日 20時08分 現在、外部モジュール(動的リンク)のデバイスドライバを開発しております。 GPIOなどの各レジスタにアクセスを行いたいのですが、 ioremapで指定するアドレスは「IMX6ULLRM.pdf」に記載されているアドレスをそのまま使用すればよろしいでしょうか? 例えば GPIO data register であれば 0x0209C000 で アクセスが可能? よろしくお願いいたします。 コメントを投稿するにはログインまたは登録をしてください コメント at_mizo 2022年8月8日 9時38分 溝渕です。 > GPIOなどの各レジスタにアクセスを行いたいのですが、 > ioremapで指定するアドレスは「IMX6ULLRM.pdf」に記載されているアドレスをそのまま使用すればよろしいでしょうか? > 例えば > GPIO data register であれば 0x0209C000 で アクセスが可能? 可能と思いますが、すでに実装済みのGPIOドライバと競合するのでおすすめしません。 Linuxでは、ハードウェアアクセスの競合を避ける為に、通常1つのデバイスへのアクセスは1つのドライバが行います。 例えば、i2c-gpio(GPIOを利用したI2Cバス)ドライバでは、次のようにGPIOを扱っています。 drivers/i2c/busses/i2c-gpio.c: static int i2c_gpio_probe(struct platform_device *pdev) { :snip if (pdev->dev.of_node) { //device treeからgpioを取得0 ret = of_i2c_gpio_get_pins(pdev->dev.of_node, &sda_pin, &scl_pin); :snip //SDAピンのgpioを要求(これによってアクセスを排他可能) ret = devm_gpio_request(&pdev->dev, sda_pin, "sda"); :snip //入出力方向を設定 if (pdata->sda_is_open_drain) { gpio_direction_output(pdata->sda_pin, 1); (Armadillo-640の例ですが)device treeでは上記GPIOを次のように指定しています。 arch/arm/boot/dts/armadillo-640_con9_awl13_rtc.dts: i2c-gpio1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c_gpio1>; #address-cells = <1>; #size-cells = <0>; compatible = "i2c-gpio"; gpios = < &gpio3 24 GPIO_ACTIVE_HIGH /* SDA */ &gpio3 23 GPIO_ACTIVE_HIGH /* SCL */ >; i2c-gpio,delay-us = <2>; ご参考になれば。 コメントを投稿するにはログインまたは登録をしてください
at_mizo 2022年8月8日 9時38分 溝渕です。 > GPIOなどの各レジスタにアクセスを行いたいのですが、 > ioremapで指定するアドレスは「IMX6ULLRM.pdf」に記載されているアドレスをそのまま使用すればよろしいでしょうか? > 例えば > GPIO data register であれば 0x0209C000 で アクセスが可能? 可能と思いますが、すでに実装済みのGPIOドライバと競合するのでおすすめしません。 Linuxでは、ハードウェアアクセスの競合を避ける為に、通常1つのデバイスへのアクセスは1つのドライバが行います。 例えば、i2c-gpio(GPIOを利用したI2Cバス)ドライバでは、次のようにGPIOを扱っています。 drivers/i2c/busses/i2c-gpio.c: static int i2c_gpio_probe(struct platform_device *pdev) { :snip if (pdev->dev.of_node) { //device treeからgpioを取得0 ret = of_i2c_gpio_get_pins(pdev->dev.of_node, &sda_pin, &scl_pin); :snip //SDAピンのgpioを要求(これによってアクセスを排他可能) ret = devm_gpio_request(&pdev->dev, sda_pin, "sda"); :snip //入出力方向を設定 if (pdata->sda_is_open_drain) { gpio_direction_output(pdata->sda_pin, 1); (Armadillo-640の例ですが)device treeでは上記GPIOを次のように指定しています。 arch/arm/boot/dts/armadillo-640_con9_awl13_rtc.dts: i2c-gpio1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c_gpio1>; #address-cells = <1>; #size-cells = <0>; compatible = "i2c-gpio"; gpios = < &gpio3 24 GPIO_ACTIVE_HIGH /* SDA */ &gpio3 23 GPIO_ACTIVE_HIGH /* SCL */ >; i2c-gpio,delay-us = <2>; ご参考になれば。 コメントを投稿するにはログインまたは登録をしてください
at_mizo
2022年8月8日 9時38分
溝渕です。
> GPIOなどの各レジスタにアクセスを行いたいのですが、
> ioremapで指定するアドレスは「IMX6ULLRM.pdf」に記載されているアドレスをそのまま使用すればよろしいでしょうか?
> 例えば
> GPIO data register であれば 0x0209C000 で アクセスが可能?
可能と思いますが、すでに実装済みのGPIOドライバと競合するのでおすすめしません。
Linuxでは、ハードウェアアクセスの競合を避ける為に、通常1つのデバイスへのアクセスは1つのドライバが行います。
例えば、i2c-gpio(GPIOを利用したI2Cバス)ドライバでは、次のようにGPIOを扱っています。
(Armadillo-640の例ですが)device treeでは上記GPIOを次のように指定しています。
ご参考になれば。