|
@@ -230,3 +230,70 @@ int __init omap_mux_get_by_name(const char *muxname,
|
|
|
|
|
|
*found_partition = partition;
|
|
|
*found_mux = mux;
|
|
|
+
|
|
|
+ return mux_mode;
|
|
|
+ }
|
|
|
+
|
|
|
+ return -ENODEV;
|
|
|
+}
|
|
|
+
|
|
|
+int __init omap_mux_init_signal(const char *muxname, int val)
|
|
|
+{
|
|
|
+ struct omap_mux_partition *partition = NULL;
|
|
|
+ struct omap_mux *mux = NULL;
|
|
|
+ u16 old_mode;
|
|
|
+ int mux_mode;
|
|
|
+
|
|
|
+ mux_mode = omap_mux_get_by_name(muxname, &partition, &mux);
|
|
|
+ if (mux_mode < 0 || !mux)
|
|
|
+ return mux_mode;
|
|
|
+
|
|
|
+ old_mode = omap_mux_read(partition, mux->reg_offset);
|
|
|
+ mux_mode |= val;
|
|
|
+ pr_debug("%s: Setting signal %s 0x%04x -> 0x%04x\n",
|
|
|
+ __func__, muxname, old_mode, mux_mode);
|
|
|
+ omap_mux_write(partition, mux_mode, mux->reg_offset);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+struct omap_hwmod_mux_info * __init
|
|
|
+omap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads)
|
|
|
+{
|
|
|
+ struct omap_hwmod_mux_info *hmux;
|
|
|
+ int i, nr_pads_dynamic = 0;
|
|
|
+
|
|
|
+ if (!bpads || nr_pads < 1)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ hmux = kzalloc(sizeof(struct omap_hwmod_mux_info), GFP_KERNEL);
|
|
|
+ if (!hmux)
|
|
|
+ goto err1;
|
|
|
+
|
|
|
+ hmux->nr_pads = nr_pads;
|
|
|
+
|
|
|
+ hmux->pads = kzalloc(sizeof(struct omap_device_pad) *
|
|
|
+ nr_pads, GFP_KERNEL);
|
|
|
+ if (!hmux->pads)
|
|
|
+ goto err2;
|
|
|
+
|
|
|
+ for (i = 0; i < hmux->nr_pads; i++) {
|
|
|
+ struct omap_mux_partition *partition;
|
|
|
+ struct omap_device_pad *bpad = &bpads[i], *pad = &hmux->pads[i];
|
|
|
+ struct omap_mux *mux;
|
|
|
+ int mux_mode;
|
|
|
+
|
|
|
+ mux_mode = omap_mux_get_by_name(bpad->name, &partition, &mux);
|
|
|
+ if (mux_mode < 0)
|
|
|
+ goto err3;
|
|
|
+ if (!pad->partition)
|
|
|
+ pad->partition = partition;
|
|
|
+ if (!pad->mux)
|
|
|
+ pad->mux = mux;
|
|
|
+
|
|
|
+ pad->name = kzalloc(strlen(bpad->name) + 1, GFP_KERNEL);
|
|
|
+ if (!pad->name) {
|
|
|
+ int j;
|
|
|
+
|
|
|
+ for (j = i - 1; j >= 0; j--)
|
|
|
+ kfree(hmux->pads[j].name);
|