[PATCH 1/1] bsps/beagle: register i2c device at initialization
Christian Mauderer
list at c-mauderer.de
Wed Sep 18 17:59:02 UTC 2019
Hello Vijay,
I tried it and the patch works. But there is a point that might could be
improved:
My application can still call bbb_register_i2c_0(). If I do that it
returns an error code. That's better than if it would just initialize
the bus twice. But it's not very clear from a user perspective. I could
think of multiple alternatives:
1. Remove / rename the function so that it is clear at link time that it
isn't there any more. In the ideal case, it's not longer visible in a
header that is thought for the application developer.
2. Use 1 but make the function an empty one (returning success) so it
doesn't fail.
3. Remember that the function has already been called in some
function-static flag and don't execute it a second time.
I think I would use 1. The function isn't useful any more if it is
called during system init. And it should be very clear for a developer
that something changed if there is a linker error with that function.
Best regards
Christian
On 18/09/2019 00:03, Vijay Kumar Banerjee wrote:
> ---
> bsps/arm/beagle/i2c/bbb-i2c.c | 6 +++---
> bsps/arm/beagle/start/bspstart.c | 13 +++++++++++++
> 2 files changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/bsps/arm/beagle/i2c/bbb-i2c.c b/bsps/arm/beagle/i2c/bbb-i2c.c
> index 37b88864b9..f705078085 100644
> --- a/bsps/arm/beagle/i2c/bbb-i2c.c
> +++ b/bsps/arm/beagle/i2c/bbb-i2c.c
> @@ -186,16 +186,16 @@ static int am335x_i2c_reset( bbb_i2c_bus *bus )
>
> bus->con_reg = 0;
> regs->BBB_I2C_CON = bus->con_reg;
> - udelay( 50000 );
> + rtems_counter_delay_nanoseconds(50000000);
>
> regs->BBB_I2C_SYSC = AM335X_I2C_SYSC_SRST;
> - udelay( 1000 );
> + rtems_counter_delay_nanoseconds(1000000);
> regs->BBB_I2C_CON = AM335X_I2C_CON_I2C_EN;
>
> while ( !( regs->BBB_I2C_SYSS & AM335X_I2C_SYSS_RDONE )
> && timeout >= 0 ) {
> --timeout;
> - udelay( 100 );
> + rtems_counter_delay_nanoseconds(100000);
> }
>
> if ( timeout <= 0 ) {
> diff --git a/bsps/arm/beagle/start/bspstart.c b/bsps/arm/beagle/start/bspstart.c
> index 224f9ecf3b..aadb9e826f 100644
> --- a/bsps/arm/beagle/start/bspstart.c
> +++ b/bsps/arm/beagle/start/bspstart.c
> @@ -17,6 +17,8 @@
> #include <bsp/irq-generic.h>
> #include <bsp/fdt.h>
> #include <bsp/linker-symbols.h>
> +#include <bsp/i2c.h>
> +#include <rtems/sysinit.h>
>
> #include "bspdebug.h"
>
> @@ -41,3 +43,14 @@ uint32_t bsp_fdt_map_intr(const uint32_t *intr, size_t icells)
> {
> return intr[0];
> }
> +
> +static void bbb_i2c_0_initialize(void)
> +{
> + bbb_register_i2c_0();
> +}
> +
> +RTEMS_SYSINIT_ITEM(
> + bbb_i2c_0_initialize,
> + RTEMS_SYSINIT_LAST,
> + RTEMS_SYSINIT_ORDER_LAST
> +);
>
More information about the devel
mailing list