06 Aug, 2015

17 commits

  • This PMIC is used with SoCs which need a combination of BUCKs and LDOs. The
    driver supports probing and basic register access. It supports the standard
    device tree binding and supports driver model. A regulator driver can be
    provided also.

    Signed-off-by: Simon Glass
    Acked-by: Przemyslaw Marczak

    Simon Glass
     
  • The TPS65090 has 7 FETs which are modelled as regulators. This allows them
    to be controlled by drivers easier, accessed through the 'regulator' command
    and used by other drivers.

    Signed-off-by: Simon Glass
    Acked-by: Przemyslaw Marczak

    Simon Glass
     
  • The existing TPS65090 driver does not support driver model. Add a new one
    that does. This can be used as a base for a regulator driver also. It uses
    the standard device tree binding.

    Signed-off-by: Simon Glass
    Acked-by: Przemyslaw Marczak

    Simon Glass
     
  • As a debugging aid, allow UART3 to be used as a debug UART in SPL. This
    is a precursor to proper UART support, which requires a substantial
    refactor.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Add a debug UART implementation for this serial driver. It does not set up
    pinmux automatically - this must be done before calling debug_uart_init().

    Signed-off-by: Simon Glass

    Simon Glass
     
  • The debug UART code needs to perform the same init as the normal UART
    driver. In preparation for this, move the init code into two functions, one
    for the basic init and one for setting the baud rate. This will make adding
    debug UART support easier.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Add a driver to support the special LDO access used by spring. This is a
    custom method in the cros_ec protocol - it does not use an I2C
    pass-through.

    There are two implementation choices:

    1. Write a special LDO driver which can talk across the EC. Duplicate all
    the logic from TPS65090 for retrying when the LDO fails to come up.

    2. Write a special I2C bus driver which pretends to be a TPS65090 and
    transfers reads and writes using the LDO message.

    Either is distasteful. The latter method is chosen since it results in less
    code duplication and a fairly simple (30-line) implementation of the core
    logic.

    The crosec 'ldo' subcommand could be removed (since i2c md/mw will work
    instead) but is retained as a convenience.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • The Chrome OS EC supports tunnelling through to an I2C bus on the EC. This
    currently uses a copy of the I2C command code and a special 'crosec'
    sub-command.

    With driver model we can define an I2C bus which tunnels through to the EC,
    and use the normal 'i2c' command to access it. This simplifies the code and
    removes some duplication.

    Add an I2C driver which tunnels through to the EC. Adjust the EC code to
    support binding child devices so that it can be set up. Adjust the existing
    I2C xfer function to fit driver model better.

    For now the old code remains to allow things to still work. It will be
    removed in a later patch once the new flow is fully enabled.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • The existing driver model implementation uses the old non-driver-model code
    to operate, but has become impossibly tangled as a result. The actual
    algorithm is quite simple.

    Also the normal-speed and high-speed buses are quite different and it
    doesn't seem that useful to put them in the same driver.

    Finally, there is a bug which breaks communication with the Maxim sound
    codec and may cause problems with other device.

    Rewrite the driver model code for normal-speed operation so that it is
    easier to understand, and fix the bug. Add a TODO to split the drivers.

    Signed-off-by: Simon Glass
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • This function should not use mixed case, and it is simpler to use
    clrbits_le32() when clearing bits. Fix it.

    Signed-off-by: Simon Glass
    Acked-by: Heiko Schocher

    Simon Glass
     
  • While I2C supports multi-master buses this is difficult to get right.
    The implementation on the master side in software is quite complex.
    Clock-stretching and the arbitrary time that an I2C transaction can take
    make it difficult to share the bus fairly in the face of high traffic.
    When one or more masters can be reset independently part-way through a
    transaction it is hard to know the state of the bus.

    This driver provides a scheme based on two 'claim' GPIOs, one driven by the
    AP (Application Processor, meaning the main CPU) and one driven by the EC
    (Embedded Controller, a small CPU aimed at handling system tasks). With
    these they can communicate and reliably share the bus. This scheme has
    minimal overhead and involves very little code. It is used on snow to
    permit the EC and the AP to share access to the main system PMIC and
    battery. The scheme can survive reboots by either side without difficulty.
    This scheme has been tested in the field with millions of devices.

    Since U-Boot runs on the AP, the terminology used is 'our' claim GPIO,
    meaning the AP's, and 'their' claim GPIO, meaning the EC's. This terminology
    is used by the device tree bindings in Linux also.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Add a new I2C_MUX uclass. Devices in this class can multiplex between
    several I2C buses, selecting them one at a time for use by the system.
    The multiplexing mechanism is left to the driver to decide - it may be
    controlled by GPIOs, for example.

    The uclass supports only two methods: select() and deselect().

    The current mux state is expected to be stored in the mux itself since
    it is the only thing that knows how to make things work. The mux can
    record the current state and then avoid switching unless it is necessary.
    So select() can be skipped if the mux is already in the correct state.
    Also deselect() can be made a nop if required.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Sometimes it is useful to be able to transfer a raw I2C message. This
    happens when the chip address needs to be set manually, or when the data to
    be sent/received is in another buffer.

    Add a function to provide access to this.

    Signed-off-by: Simon Glass
    Acked-by: Heiko Schocher

    Simon Glass
     
  • Add a way to dump the contents of an I2C message for debugging purposes.

    Signed-off-by: Simon Glass
    Acked-by: Heiko Schocher

    Simon Glass
     
  • It is common for one node to reference another via a phandle. Add support
    for obtaining an attached device by this method. As an example, a node may
    have a 'power-supply' property which references a regulator, allowing the
    driver to turn on its power.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Tom Rini
     
  • Remove DEBUG in drivers/pci/pci_compat.c.

    Signed-off-by: Bin Meng
    Acked-by: Simon Glass

    Bin Meng
     

05 Aug, 2015

21 commits


04 Aug, 2015

2 commits