libmaple/i2c.h: Don't use BIT().

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
libmaple/i2c.h: Cosmetics.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Fix I2C_CR2_FREQ bit definition.

The existing value clobbers the entire register.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
libmaple/i2c.h: Assert LeafLabs copyright.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
<libmaple/i2c.h>: Add missing register bit defns.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
<libmaple/i2c.h>: Cosmetics.

Reorder register bit definitions by descending bit number, for
consistency with the rest of the library.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
<libmaple/i2c.h>: Cosmetics.

Put CCR definitions after SR2, to keep them in register map order.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
libmaple/i2c.c: Cosmetics.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
I2C: Restore on F1, refactoring prep for F2.

Bring back <libmaple/i2c.h> support on STM32F1 with a view towards how
it'll be implemented on STM32F2. There are still many F1-isms in
libmaple/i2c.c and <libmaple/i2c.h>, to be dealt with subsequently.

Move device declarations and base pointer definitions to a new F1
<series/i2c.h>. The register maps and bit definitions themselves are
identical on both series, so leave them in the libmaple header.

Add i2c_private.h, which contains:

- I2C_DEV(), a convenience macro for defining an i2c_dev, and
- declarations for the event and error IRQ handlers.

The IRQ handlers are large, and I2C is slow anyway, so I see no reason
to make them inline in the private header (as we do for some other
peripherals). We just expose the existing ones that were formerly
static in libmaple/i2c.c, but prefix the names with underscore.

Move the device declarations and IRQ handlers into new
stm32f1/i2c.c. These use the i2c_private.h API.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
libmaple/i2c.h: Cosmetics.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Move i2c_dev and i2c_state into new i2c_common.h.

This is necessary to add series-specific infrastructure to clean up
some F1-isms in <libmaple/i2c.h>'s inline functions.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
i2c_set_input_clk(): fix an F1-ism.

i2c_set_input_clk()'s documentation says that the maximum peripheral
clock frequency is 36 MHz, but that's a hard-coded magic number. The
actual limit is the device's APB frequency or 46 MHz, whichever is
lower (F2 and F4 share the 46 MHz limit).

Fix the documentation to reflect that fact, and add an internal
series-provided function to get the maximum clock frequency for a
device. To help users porting to F2, have i2c_set_input_clk()
assert-check that the provided frequency is less than that maximum
value and the hard 46 MHz limit.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
I2C: Fix Doxygen F1-isms.

I'm not sure these functions should even exist in their present form,,
but I don't understand the code well enough to make a real fix. For
now, just replace references to RM0008 with "chip reference manual".

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
<libmaple/i2c.h>: Move low-level routines to end of file.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
I2C: I don't think 10-bit addressing works.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
libmaple/i2c.c: Replace throb() with ASSERT(0).

Calling throb() directly like that breaks the abstraction.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
libmaple/i2c.h: Better comments.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
<libmaple/i2c.h>: Fix Doxygen.

Existing Doxygen was commenting I2C_IRQ_ERROR instead of
i2c_enable_irq(), as desired.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
I2C: Add i2c_config_gpios(), i2c_master_release_bus().

These are necessary to pull out some calls to gpio_set_mode().

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
libmaple/i2c.c: Keep authorship straight.

I'm going to be moving a lot of code around without changing it soon,
so git blame will be unreliable.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>