diff options
author | Chris Dearman <chris.dearman@imgtec.com> | 2016-03-29 09:19:20 -0700 |
---|---|---|
committer | Chris Dearman <chris.dearman@imgtec.com> | 2016-03-29 13:27:32 -0700 |
commit | 09949a66e4944bfe379f6d50d8494d5aeab1296e (patch) | |
tree | 9b33edd5070dbcf12fbd1f1f95176768eb3eff7c | |
parent | 4234d175b750d5c27a40007ad8ce21172bc9a9c3 (diff) | |
download | creatorci41-09949a66e4944bfe379f6d50d8494d5aeab1296e.tar.gz |
PeripheralIO - Creator CI41 PIO HAL
SPI, I2C LED and GPIO support for Creator CI41.
TEST:
peripheralman_gpio_interrupt --pin=MFIO_24 (apply GND to MIK2 INT)
peripheralman_gpio_flip --pin=MFIO_74 (attach resistor+LED to MIK2 CS)
peripheralman_blink_led --led=LED1
Bug: 27902743
Change-Id: Ib07e84cfbbfa4f3885ae307f40b4a583bc7272ec
-rw-r--r-- | BoardConfig.mk | 1 | ||||
-rw-r--r-- | pio_hal/Android.mk | 30 | ||||
-rw-r--r-- | pio_hal/pio_hal.cc | 88 |
3 files changed, 119 insertions, 0 deletions
diff --git a/BoardConfig.mk b/BoardConfig.mk index d9acbbd..dd2751b 100644 --- a/BoardConfig.mk +++ b/BoardConfig.mk @@ -39,6 +39,7 @@ PRODUCT_COPY_FILES += \ device/imagination/creatorci41/provision-device:provision-device DEVICE_PACKAGES += \ + peripheral_io.fs1130 \ proddata BOARD_SEPOLICY_DIRS += \ diff --git a/pio_hal/Android.mk b/pio_hal/Android.mk new file mode 100644 index 0000000..8256d84 --- /dev/null +++ b/pio_hal/Android.mk @@ -0,0 +1,30 @@ +# Copyright 2016 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +ifeq ($(TARGET_DEVICE), creatorci41) + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := pio_hal.cc +LOCAL_CPP_EXTENSION := .cc +LOCAL_MODULE_RELATIVE_PATH := hw +LOCAL_SHARED_LIBRARIES := liblog libchrome +LOCAL_STATIC_LIBRARIES := peripheral_manager_hal_headers +LOCAL_MODULE := peripheral_io.fs1130 +LOCAL_CFLAGS := -fexceptions + +include $(BUILD_SHARED_LIBRARY) + +endif diff --git a/pio_hal/pio_hal.cc b/pio_hal/pio_hal.cc new file mode 100644 index 0000000..6e1fbee --- /dev/null +++ b/pio_hal/pio_hal.cc @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <base/logging.h> +#include <hardware/hardware.h> +#include <hardware/peripheral_io.h> + +static int register_device(const peripheral_io_module_t* dev __unused, + const peripheral_registration_cb_t* callbacks) { + LOG(INFO) << "register_device creatorci41"; + + // If a jumper (JPx) is mentioned in the comment, it must be set correctly to + // route the SOC pin to the output connector + + // Register GPIO Pins + callbacks->register_gpio_sysfs("MFIO_22", 22); // RPi[7] (JP1) / MIK1 AN (JP1) + callbacks->register_gpio_sysfs("MFIO_14", 14); // RPi[8] (JP7) / MIK1 RX (JP7) + callbacks->register_gpio_sysfs("MFIO_75", 75); // RPi[10] (JP8) / MIK1 TX (JP8) + callbacks->register_gpio_sysfs("MFIO_25", 25); // RPi[11] (JP9) / MIK2 AN (JP9) + callbacks->register_gpio_sysfs("MFIO_23", 23); // RPi[13] / MIK1 RST + callbacks->register_gpio_sysfs("MFIO_24", 24); // RPi[15] / MIK2 INT (JP11) + callbacks->register_gpio_sysfs("MFIO_88", 88); // RPi[19] (JP4) / MIK2 MOSI (JP4) + callbacks->register_gpio_sysfs("MFIO_89", 89); // RPi[21] (JP5) / MIK2 MISO (JP5) + callbacks->register_gpio_sysfs("MFIO_21", 21); // RPi[22] (JP3) / MIK1 INT (JP3) + callbacks->register_gpio_sysfs("MFIO_31", 31); // RPi[23] (JP6) / MIK1 CS (JP6) + callbacks->register_gpio_sysfs("MFIO_28", 28); // RPi[24] (JP2) / MIK1 CS (JP2) + callbacks->register_gpio_sysfs("MFIO_27", 27); // RPi[29] / MIK2 RST + callbacks->register_gpio_sysfs("MFIO_72", 72); // RPi[31] + callbacks->register_gpio_sysfs("MFIO_80", 80); // RPi[33] + callbacks->register_gpio_sysfs("MFIO_81", 81); // RPi[35] + callbacks->register_gpio_sysfs("MFIO_82", 82); // RPi[36] + callbacks->register_gpio_sysfs("MFIO_83", 83); // RPi[37] + callbacks->register_gpio_sysfs("MFIO_84", 84); // RPi[38] + callbacks->register_gpio_sysfs("MFIO_85", 85); // RPi[40] + + callbacks->register_gpio_sysfs("MFIO_73", 73); // MIK1 PWM + callbacks->register_gpio_sysfs("MFIO_74", 74); // MIK2 PWM + + // Register the SPI bus + // For RPi and MIK2 the MOSI (JP4), MISO (JP5) and MCLK (JP3) outputs + // must be correctly configured in addition to the chip selects mentioned below + callbacks->register_spi_dev_bus("SPI0", 0, 2); // RPi[24] (JP2) / MIK1 CS (JP2) + callbacks->register_spi_dev_bus("SPI1", 1, 3); // RPi[26] / MIK2 CS (JP10) + + // Register the I2C bus + callbacks->register_i2c_dev_bus("I2C0", 0); // RPi[3,5] / MIK2 SCL/SDA + callbacks->register_i2c_dev_bus("I2C1", 1); // RPi[12,16] / MIK1 SCL/SDA + + // Register sysfs leds + callbacks->register_led_sysfs("LED1", "marduk:red:user1"); + callbacks->register_led_sysfs("LED2", "marduk:red:user2"); + callbacks->register_led_sysfs("LED3", "marduk:red:user3"); + callbacks->register_led_sysfs("LED4", "marduk:red:user4"); + callbacks->register_led_sysfs("LED5", "marduk:red:user5"); + callbacks->register_led_sysfs("LED6", "marduk:red:user6"); + callbacks->register_led_sysfs("LED7", "marduk:red:user7"); + + return 0; +} + +static struct hw_module_methods_t hal_module_methods = {}; + +peripheral_io_module_t HAL_MODULE_INFO_SYM = { + .common = + { + .tag = HARDWARE_MODULE_TAG, + .module_api_version = 0, + .hal_api_version = HARDWARE_HAL_API_VERSION, + .id = PERIPHERAL_IO_HARDWARE_MODULE_ID, + .name = "periperal IO HAL", + .author = "The Android Open Source Project", + .methods = &hal_module_methods, + }, + .register_devices = register_device, +}; |