summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Dearman <chris.dearman@imgtec.com>2016-03-29 09:19:20 -0700
committerChris Dearman <chris.dearman@imgtec.com>2016-03-29 13:27:32 -0700
commit09949a66e4944bfe379f6d50d8494d5aeab1296e (patch)
tree9b33edd5070dbcf12fbd1f1f95176768eb3eff7c
parent4234d175b750d5c27a40007ad8ce21172bc9a9c3 (diff)
downloadcreatorci41-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.mk1
-rw-r--r--pio_hal/Android.mk30
-rw-r--r--pio_hal/pio_hal.cc88
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,
+};