aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/serial/mpc52xx_uart.c
diff options
context:
space:
mode:
authorGrant Likely <grant.likely@secretlab.ca>2009-02-03 14:30:25 -0500
committerGrant Likely <grant.likely@secretlab.ca>2009-02-03 14:30:25 -0500
commit3b5ebf8e1ac88babf60772d54bc81b180b5f53b0 (patch)
tree4325e07d1036ecda66d1f3c2e5fb5c7bbaf5341f /drivers/serial/mpc52xx_uart.c
parentb1792e367053968f2ddb48bc911d314143ce6242 (diff)
powerpc/5200: Stop using device_type and port-number properties
There is no reason for the PSC UART driver or the Ethernet driver to require a device_type property. The compatible value is sufficient to uniquely identify the device. Remove it from the driver. The whole 'port-number' scheme for assigning numbers to PSC uarts was always rather half baked and just adds complexity. Remove it from the driver. After this patch is applied, PSC UART numbers are simply assigned from the order they are found in the device tree (just like all the other devices). Userspace can query sysfs to determine what ttyPSC number is assigned to each PSC instance. Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Reviewed-by: Wolfram Sang <w.sang@pengutronix.de>
Diffstat (limited to 'drivers/serial/mpc52xx_uart.c')
-rw-r--r--drivers/serial/mpc52xx_uart.c38
1 files changed, 10 insertions, 28 deletions
diff --git a/drivers/serial/mpc52xx_uart.c b/drivers/serial/mpc52xx_uart.c
index 0c3a2ab1612c..d73d7da3f304 100644
--- a/drivers/serial/mpc52xx_uart.c
+++ b/drivers/serial/mpc52xx_uart.c
@@ -50,8 +50,8 @@
50/* OF Platform device Usage : 50/* OF Platform device Usage :
51 * 51 *
52 * This driver is only used for PSCs configured in uart mode. The device 52 * This driver is only used for PSCs configured in uart mode. The device
53 * tree will have a node for each PSC in uart mode w/ device_type = "serial" 53 * tree will have a node for each PSC with "mpc52xx-psc-uart" in the compatible
54 * and "mpc52xx-psc-uart" in the compatible string 54 * list.
55 * 55 *
56 * By default, PSC devices are enumerated in the order they are found. However 56 * By default, PSC devices are enumerated in the order they are found. However
57 * a particular PSC number can be forces by adding 'device_no = <port#>' 57 * a particular PSC number can be forces by adding 'device_no = <port#>'
@@ -1212,30 +1212,18 @@ mpc52xx_uart_of_resume(struct of_device *op)
1212#endif 1212#endif
1213 1213
1214static void 1214static void
1215mpc52xx_uart_of_assign(struct device_node *np, int idx) 1215mpc52xx_uart_of_assign(struct device_node *np)
1216{ 1216{
1217 int free_idx = -1;
1218 int i; 1217 int i;
1219 1218
1220 /* Find the first free node */ 1219 /* Find the first free PSC number */
1221 for (i = 0; i < MPC52xx_PSC_MAXNUM; i++) { 1220 for (i = 0; i < MPC52xx_PSC_MAXNUM; i++) {
1222 if (mpc52xx_uart_nodes[i] == NULL) { 1221 if (mpc52xx_uart_nodes[i] == NULL) {
1223 free_idx = i; 1222 of_node_get(np);
1224 break; 1223 mpc52xx_uart_nodes[i] = np;
1224 return;
1225 } 1225 }
1226 } 1226 }
1227
1228 if ((idx < 0) || (idx >= MPC52xx_PSC_MAXNUM))
1229 idx = free_idx;
1230
1231 if (idx < 0)
1232 return; /* No free slot; abort */
1233
1234 of_node_get(np);
1235 /* If the slot is already occupied, then swap slots */
1236 if (mpc52xx_uart_nodes[idx] && (free_idx != -1))
1237 mpc52xx_uart_nodes[free_idx] = mpc52xx_uart_nodes[idx];
1238 mpc52xx_uart_nodes[idx] = np;
1239} 1227}
1240 1228
1241static void 1229static void
@@ -1243,23 +1231,17 @@ mpc52xx_uart_of_enumerate(void)
1243{ 1231{
1244 static int enum_done; 1232 static int enum_done;
1245 struct device_node *np; 1233 struct device_node *np;
1246 const unsigned int *devno;
1247 const struct of_device_id *match; 1234 const struct of_device_id *match;
1248 int i; 1235 int i;
1249 1236
1250 if (enum_done) 1237 if (enum_done)
1251 return; 1238 return;
1252 1239
1253 for_each_node_by_type(np, "serial") { 1240 /* Assign index to each PSC in device tree */
1241 for_each_matching_node(np, mpc52xx_uart_of_match) {
1254 match = of_match_node(mpc52xx_uart_of_match, np); 1242 match = of_match_node(mpc52xx_uart_of_match, np);
1255 if (!match)
1256 continue;
1257
1258 psc_ops = match->data; 1243 psc_ops = match->data;
1259 1244 mpc52xx_uart_of_assign(np);
1260 /* Is a particular device number requested? */
1261 devno = of_get_property(np, "port-number", NULL);
1262 mpc52xx_uart_of_assign(np, devno ? *devno : -1);
1263 } 1245 }
1264 1246
1265 enum_done = 1; 1247 enum_done = 1;