Re: [serial] Calling platform specific code on driver bind/unbind

Andy Shevchenko
2015-12-12T23:58:09Z

On Fri, Dec 4, 2015 at 11:37 PM, Piotr Madalinski
<piotr.madalinski@yahoo.pl> wrote:
> Hi,
> I'm hacking my openwrt router and look for a proper way to make a serial
> driver call a platform-specific function such as this:
>
> static void ath79_enable_uart(void) {
> if (soc_is_ar933x())
> ath79_gpio_function_enable(AR933X_GPIO_FUNC_UART_EN);
> }
>
> and
>
> static void ath79_disable_uart(void) {
> if (soc_is_ar933x())
> ath79_gpio_function_disable(AR933X_GPIO_FUNC_UART_EN);
> }
>
> on driver bind/unbind instead of in platform initialization code, in order
> to be able to
> reuse the pins as gpio, without disabling uart entirely.
>
> My current solution uses platform_data to pass function pointers,
> and invokes them in driver's request_port and release_port functions
> respectively.
>
> And, oddly enough, the one in release_port gets invoked on unbind but the
> other one
> isn't called on bind (I had to add a call to it in probe to get it working).
>
> So I wonder, if the request/release functions are a proper place for such a
> callback,
> or is there some better, more 'canonical' solution.

pinctrl framework / API?

>
> Also, I could attach my patches but it is my first post here, and they are a
> bit openwrt specific,
> and I don't want to be yelled upon ;-).

--
With Best Regards,
Andy Shevchenko